【问题标题】:MYSQL query between date behaviour日期行为之间的MYSQL查询
【发布时间】:2021-02-11 03:42:21
【问题描述】:

我有一个查询如下:

SELECT * FROM  tbl_invoice_header
WHERE Create_Date BETWEEN '2019-04-01' AND '2020-03-31'
AND Auth_Settle_Date >'2020-03-31';

我想获取日期范围之间的所有数据,但这是在 2020-03-31 之后解决的

它返回给我一行 Auth_Settle_Date=2020-03-31 14:24:36

Auth_Settle_Date 是一个日期时间列,所以我猜它为什么会回来

我猜这是正确的,因为它是在 2020-03-31 之后,但不是我正在寻找的功能

如果我使用,基于以前的 cmets: WHERE Create_Date BETWEEN '2019-04-01' AND '2020-03-31' AND Auth_Settle_Date > '2020-03-31' ;

如果我使用: WHERE create_date >= '2019-03-01' AND create_date = '2020-04-01'

WHERE create_date >= '2019-03-01' AND create_date = '2020-03-31' + INTERVAL 1 DAY

实际正确的查询似乎在哪里:

WHERE Create_Date BETWEEN '2019-04-01' AND '2020-03-31' AND Auth_Settle_Date >= '2020-04-01'

所以我想在我将它传递给查询之前,我似乎必须在查询之外添加一天到日期,这似乎很奇怪

【问题讨论】:

    标签: mysql sql date datetime where-clause


    【解决方案1】:

    是获得将 1 天添加到提供的日期的功能的唯一方法

    是的,这是正确的做法。我还建议在 create_date 上使用半开间隔,以防它也有时间部分:

    where create_date >= '2019-03-01' 
      and create_date <  '2020-04-01' 
      and auth_settle_date >= '2020-04-01'
    

    旁注:我想你的意思是'2019-03-01' 而不是'2019-04-01' 作为create_date 区间的下限(否则查询有点无意义)。

    如果日期来自您的代码之外,作为查询的参数,您可以直接在查询中添加 1 天:

    where create_date >= :start_date
      and create_date <  :end_date + interval 1 day
      and auth_settle_date >= :end_date + interval 1 day
    

    【讨论】:

      【解决方案2】:

      您可以为此使用+ INtervall

      SELECT * FROM  tbl_invoice_header
      WHERE Create_Date BETWEEN '2019-04-01' AND '2020-03-31'
      AND Auth_Settle_Date > '2020-03-31' + INTERVAL 1 DAY;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-02
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多