【问题标题】:SQL where clause for two dates exactly one month minus one second apart from each other?两个日期的 SQL where 子句正好相差一个月减去一秒?
【发布时间】:2011-10-28 03:05:39
【问题描述】:

我在一个表中有两个日期时间列,我想精确地选择那些从第一列到第二列的差异是一个月短一秒的行。例如,它将选择这些行(而不是其他行)作为 2011 年的日期时间:

col1                col2
2011-01-01 00:00:00 2011-01-31 23:59:59
2011-02-01 00:00:00 2011-02-28 23:59:59
2011-03-01 00:00:00 2011-03-31 23:59:59
2011-04-01 00:00:00 2011-04-30 23:59:59
2011-05-01 00:00:00 2011-05-31 23:59:59
2011-06-01 00:00:00 2011-06-30 23:59:59
2011-07-01 00:00:00 2011-07-31 23:59:59
2011-08-01 00:00:00 2011-08-31 23:59:59
2011-09-01 00:00:00 2011-09-30 23:59:59
2011-10-01 00:00:00 2011-10-31 23:59:59
2011-11-01 00:00:00 2011-11-30 23:59:59
2011-12-01 00:00:00 2011-12-31 23:59:59

但是,例如,选择 2012 年就必须考虑闰年。

我该如何写这样的声明?

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:
    SELECT *
    FROM Table
    WHERE col2 = DATEADD(second, -1, (DATEADD(Month, 1 Col1)))
    -- check for either direction
    OR col1 = DATEADD(second, -1, (DATEADD(Month, 1 Col2)))
    

    这表示,“告诉我 column2 比 col1 (多一个月和少一秒)的行。”

    SQL Server 中的内置日期逻辑会自动考虑闰年等情况。

    【讨论】:

    • +1 请注意,OP 可能希望比较双向工作,例如,任一方向的差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多