SQL - 对另一个查询的结果执行查询?
SQL - Performing a query on a result from another query?
我有一个包含日期值的列 (varchar),我需要找到那些将在接下来的 30 天内到期的日期。
过期日期
===================
20171208,
20171215,样品
20171130,测试
N/A
不
(空行)
所以,首先我需要获取逗号前的值。在结果集中,我需要过滤掉只有数字的行(没有 'N/A' 或 'No' 或空行)然后我需要过滤那些在接下来的 30 天内到期的日期。
已编辑
我试过以下方法,结果集似乎不合适
SELECT
DocName,
CategoryName,
AttributeName,
CAST(SUBSTRING_INDEX(AttributeValue, ',', 1) AS DATE) AS ExpiredDate
FROM myDB
WHERE (AttributeName = 'Date of last vessel OVID' OR AttributeName = 'Next Statutory docking' OR
AttributeName = 'Last statutory docking') AND AttributeValue LIKE '%[^0-9]%' AND
DATEDIFF(now(), AttributeValue) <= 30;
因为您不仅将日期存储为文本,而且将这些日期与完全非日期的信息混合在一起,这会使事情变得复杂。在这种情况下,我们可以进行两项检查,一是确保记录以实际预期日期开始,二是确保日期差异在从现在起的 30 天内。
SELECT ExpiringDate
FROM
(
SELECT ExpiringDate
FROM yourTable
WHERE ExpiringDate REGEXP '^[0-9]{8}'
) t
WHERE
DATEDIFF(LEFT(ExpiringDate, 8), NOW()) BETWEEN 0 AND 30;
请注意,我使用子查询首先删除甚至没有可解析日期的行。这样做的原因是,如果没有为两个参数传递有效日期,DATEDIFF
将出错。
我有一个包含日期值的列 (varchar),我需要找到那些将在接下来的 30 天内到期的日期。
过期日期 =================== 20171208, 20171215,样品 20171130,测试 N/A 不 (空行)
所以,首先我需要获取逗号前的值。在结果集中,我需要过滤掉只有数字的行(没有 'N/A' 或 'No' 或空行)然后我需要过滤那些在接下来的 30 天内到期的日期。
已编辑
我试过以下方法,结果集似乎不合适
SELECT
DocName,
CategoryName,
AttributeName,
CAST(SUBSTRING_INDEX(AttributeValue, ',', 1) AS DATE) AS ExpiredDate
FROM myDB
WHERE (AttributeName = 'Date of last vessel OVID' OR AttributeName = 'Next Statutory docking' OR
AttributeName = 'Last statutory docking') AND AttributeValue LIKE '%[^0-9]%' AND
DATEDIFF(now(), AttributeValue) <= 30;
因为您不仅将日期存储为文本,而且将这些日期与完全非日期的信息混合在一起,这会使事情变得复杂。在这种情况下,我们可以进行两项检查,一是确保记录以实际预期日期开始,二是确保日期差异在从现在起的 30 天内。
SELECT ExpiringDate
FROM
(
SELECT ExpiringDate
FROM yourTable
WHERE ExpiringDate REGEXP '^[0-9]{8}'
) t
WHERE
DATEDIFF(LEFT(ExpiringDate, 8), NOW()) BETWEEN 0 AND 30;
请注意,我使用子查询首先删除甚至没有可解析日期的行。这样做的原因是,如果没有为两个参数传递有效日期,DATEDIFF
将出错。