【问题标题】:Difference in SQL Date Query with ParenthesisSQL日期查询带括号的区别
【发布时间】:2020-07-31 15:16:40
【问题描述】:

我继承了多个机器学习进程,除了括号外,这些进程基本上使用相同的日期查询。以下 3 个日期查询给出了不同的行数。每个日期查询之间究竟有什么区别,以便为每个查询提供不同数量的行?

1)

WHERE
((dbo.FACTINVOICEHEADER.PAID_DATE >= '2019-02-01'
  AND dbo.FACTINVOICEHEADER.PAID_DATE <= '2020-01-31')
OR (dbo.FACTINVOICEHEADER.PAID_DATE >= '2018-02-01'
  AND dbo.FACTINVOICEHEADER.PAID_DATE <= '2019-01-31'))

2)

WHERE
((dbo.FACTINVOICEHEADER.PAID_DATE >= '2018-02-01'
AND dbo.FACTINVOICEHEADER.PAID_DATE <='2020-01-31'))

3)

WHERE 
dbo.FACTINVOICEHEADER.PAID_DATE >= '2018-02-01'
AND dbo.FACTINVOICEHEADER.PAID_DATE <= '2020-01-31'

【问题讨论】:

    标签: sql mysql-python


    【解决方案1】:

    第一个查询是选择 24 个月,减去一天(2019 年 1 月 31 日)。

    第二个查询是选择 24 个月。

    第三个查询等价于第二个。

    【讨论】:

    • 谢谢!等等,为什么第一个选择24个月减去1天(2019-01-31)?
    • 大概&lt;= '2019-01-31' 会自动翻译成&lt;= '2019-01-31 00:00:00'(一天的开始)。然后另一个范围在 24 小时后开始。你在那里错过了 24 小时。
    • 要添加到 cmets,这取决于 dbo.FACTINVOICEHEADER.PAID_DATE 列的数据类型。如果该字段的数据类型是 DATE,那么它应该包括所有 2019-01-31,但如果数据类型是 DATETIME,则上述注释为真。为了使您的查询按预期工作,您应该将数据类型更改为 DATE
    猜你喜欢
    • 2021-06-29
    • 2019-07-24
    • 2015-05-08
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多