【问题标题】:MySQL: Calculated Column Based on Date RangeMySQL:基于日期范围的计算列
【发布时间】:2016-02-09 20:54:40
【问题描述】:

如果日期在 2015 年之内,如何创建一个计算列,该列的值为 1,否则为 0?

我昨天在谷歌上搜索并搜索 StackOverflow,但无济于事。根据我对 CASE WHEN、BETWEEN 和 CAST 的了解,我整理了以下 SQL 脚本。

但是,尽管在 2015、2016 甚至 0000-00-00 的日期中有相应的 Prescreen 日期,但以下(截断的)脚本会产生全 0,如下所示:

SELECT 
table_r.R_Number,
table_c.ref_num,
DATE(STR_TO_DATE(table_c.Prescreen, '%d-%b-%y')) AS Prescreen,
CASE
    WHEN Prescreen BETWEEN CAST('2015-01-01' AS DATE) AND CAST('2015-12-31' AS DATE) THEN 1
    ELSE 0
END AS YTD2015_Prescreen,
table_r.Region,
FROM
table_c
    INNER JOIN
table_r ON table_c.R_Number = table_r.R_Number
WHERE
table_c.Int <> ''
;

我谦虚地请求你把你的天才借给我。谢谢你。 :)

【问题讨论】:

    标签: mysql sql date case between


    【解决方案1】:

    试试这个:

        SELECT 
        table_r.R_Number,
        table_c.ref_num,
        STR_TO_DATE(table_c.Prescreen,'%d-%b-%y') AS Prescreen,
        CASE
        WHEN STR_TO_DATE(table_c.Prescreen,'%d-%b-%y')  BETWEEN CAST('20150101'AS DATE) AND CAST('20151231' AS DATE) THEN 1
        ELSE 0
        END AS YTD2015_Prescreen,
        table_r.Region,
        FROM
        table_c
            INNER JOIN
        table_r ON table_c.R_Number = table_r.R_Number
        WHERE
        table_c.Int <> ''
        ;
    

    【讨论】:

    • 感谢您的快速响应,Kamran。根据 MySQL 参考手册,我故意使用“%b”进行日期格式(例如 Jan 到 01):dev.mysql.com/doc/refman/5.7/en/… 为了更好的衡量标准,我还是尝试了“%m”。不幸的是,所有日期都变成了“0000-00-00”或NULL。我期待更多的想法。 :)
    • @DataBender 在没有转换的情况下你在 table_c.Prescreen 列中得到了什么
    • 没有 STR_TO_DATE 转换,我得到“9-Sep-15”。
    • 看起来当你没有将 STR_TO_DATE() 包装在 DATE() 中时它可以工作。
    • 成功!谢谢你,@KamranFarzami! =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多