【问题标题】:DB2 date comparisonDB2 日期比较
【发布时间】:2020-09-08 19:53:06
【问题描述】:

我正在尝试查询 DB2 数据库以查找两个日期列之间的记录,START_DATEEND_DATE(日期以 YYYYMMDD 格式存储在 DB 中)。这就是我所拥有的,但它不起作用。谁能帮我解决这个问题?

SELECT *
FROM TBDeals
WHERE TIMESTAMP_FORMAT(START_DATE, 'YYYYMMDD') >= '2020-03-01' 
  AND TIMESTAMP_FORMAT(END_DATE, 'YYYYMMDD') <= '2020-04-20';

谢谢

【问题讨论】:

    标签: sql date db2 where-clause


    【解决方案1】:

    您将日期存储为字符串,这不是一个好习惯。另一方面,您使用的格式确实允许正确排序,那么为什么不简单地对照字符串检查现有值呢?

    where startdate >= '20200301' and end_date <= '20200420'
    

    这种方法的好处是它可以利用字符串日期列上的索引。

    如果值是数字,那么:

    where startdate >= 20200301 and end_date <= 20200420
    

    【讨论】:

    • 实际上,我们将开始和结束日期存储为 INT。这就是原因,我遇到了这个麻烦。当我放一个比较的时候,自然比较失败了。
    • @sravan: ...除非您将它们与数字进行比较。请参阅我编辑的答案。
    • 谢谢。如果没有转换本身,它就可以工作。我第一次运行查询时搞砸了。
    【解决方案2】:

    看来你的日期范围倒退了,试试这个版本:

    SELECT *
    FROM TBDeals 
    WHERE
        TIMESTAMP_FORMAT(START_DATE, 'YYYYMMDD') >= '2020-03-20' AND
        TIMESTAMP_FORMAT(END_DATE, 'YYYYMMDD') <= '2020-04-01';
    

    【讨论】:

    • 感谢您指出这一点。让我解决这个问题。但问题依然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多