MySQL 中基于 MSSQL 语法按年份选择日期范围的等效语法是什么?



我有一个MSSQL语法来选择2年内的日期:

SELECT 
column_1
FROM
XXX
WHERE 
column_1 BETWEEN DATEADD(Year, -2, '2021-05-12') and '2021-05-12'

这很好,column_1只在给定日期的两年内返回。

然而,我正在尝试将其转换为MySQL语法,以下是我尝试过的:

SELECT 
column_1
FROM
XXX
WHERE 
column_1 BETWEEN ADDDATE(date('2021-05-10'), INTERVAL 2 YEAR)

但这个回归日期不仅在两年内,而且在其他年份,我是不是错过了什么?谢谢

MS SQL中的代码是:

WHERE column_1 BETWEEN DATEADD(Year, -2, '2021-05-12') and '2021-05-12'

使用日期时不建议使用BETWEEN。在本例中,5月12日可能被选择两次(如果column_1date(,或者2021-05-12 00:00:00将被选择,如果该列有时间分量,但没有该日期的其他时间。

相反,我强烈建议将其表述为:

WHERE column_1 >= DATEADD(Year, -2, '2021-05-13') AND
column_1 < '2021-05-13'

或者在MySQL中为:

WHERE column_1 >= '2021-05-13' - interval 2 year AND
column_1 < '2021-05-13'

您不需要将日期文字强制转换为日期,也可以使用带间隔的直接算术来减去MySQL中的一些天数:

SELECT column_1
FROM XXX
WHERE column_1 BETWEEN '2021-05-12' - INTERVAL 2 YEAR AND '2021-05-12';

上面的查询有些琐碎,因为我们知道比日期文字早2年的是2019-05-12。但是,如果您使用的是列而不是日期文字,那么同样的逻辑也会起作用。

最新更新