MYSQL日期间查询行为

MYSQL日期间查询行为,mysql,sql,date,datetime,where-clause,Mysql,Sql,Date,Datetime,Where Clause,我的问题如下: 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\u Settle\u Date=2020-03-3114:24:36 Auth_Settle_Date是一个日期时间列,所以我

我的问题如下:

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\u Settle\u Date=2020-03-3114:24:36

Auth_Settle_Date是一个日期时间列,所以我想这就是它返回的原因

我想这是正确的,因为它是在2020年3月31日,但不是功能,我一直在寻找

根据之前的评论,如果我使用: 其中创建日期介于“2019-04-01”和“2020-03-31”之间 和授权结算日期>'2020-03-31'

如果我使用: 其中创建日期>='2019-03-01'和创建日期='2020-04-01'

其中创建日期>='2019-03-01'和创建日期<'2020-04-01' 授权结算日期>='2020-03-31'+间隔1天

其中,实际正确的查询似乎是:

其中创建日期介于“2019-04-01”和“2020-03-31”之间 和授权结算日期>='2020-04-01'

因此,我想在我将其传递到查询之前,我必须在查询之外添加一天到截止日期,这看起来很奇怪

是获得功能的唯一方法,可在提供的日期基础上增加1天

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

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

您可以使用
+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;
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;