MySQL 中基于 MSSQL 语法按 YEAR 选择日期范围的等效语法是什么?
What's the equivalent syntax in MySQL for selecting date ranges by YEAR based on MSSQL syntax?
我有一个 MSSQL 语法 select 2 年内的日期:
SELECT
column_1
FROM
XXX
WHERE
column_1 BETWEEN DATEADD(Year, -2, '2021-05-12') and '2021-05-12'
这很好用,column_1
仅 return 日期在给定日期的两年内。
但是,我正在尝试将其转换为 MySQL 语法,这是我尝试过的方法:
SELECT
column_1
FROM
XXX
WHERE
column_1 BETWEEN ADDDATE(date('2021-05-10'), INTERVAL 2 YEAR)
但是这个 return 的日期不仅在两年范围内,而且在其他年份范围内,我在这里错过了什么吗?谢谢
您不需要将日期文字转换为日期,也可以使用带间隔的直接算术减去 MySQL 中的一些天数:
SELECT column_1
FROM XXX
WHERE column_1 BETWEEN '2021-05-12' - INTERVAL 2 YEAR AND '2021-05-12';
上面的查询有些琐碎,因为我们知道日期字面量早 2 年是 2019-05-12
。但是,如果您使用的是列而不是日期文字,则相同的逻辑会起作用。
您在 MS SQL 中的代码是:
WHERE column_1 BETWEEN DATEADD(Year, -2, '2021-05-12') and '2021-05-12'
BETWEEN
在处理日期时不推荐使用。在此示例中,可能会选择 5 月 12 日两次(如果 column_1
是 date
)或 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'
我有一个 MSSQL 语法 select 2 年内的日期:
SELECT
column_1
FROM
XXX
WHERE
column_1 BETWEEN DATEADD(Year, -2, '2021-05-12') and '2021-05-12'
这很好用,column_1
仅 return 日期在给定日期的两年内。
但是,我正在尝试将其转换为 MySQL 语法,这是我尝试过的方法:
SELECT
column_1
FROM
XXX
WHERE
column_1 BETWEEN ADDDATE(date('2021-05-10'), INTERVAL 2 YEAR)
但是这个 return 的日期不仅在两年范围内,而且在其他年份范围内,我在这里错过了什么吗?谢谢
您不需要将日期文字转换为日期,也可以使用带间隔的直接算术减去 MySQL 中的一些天数:
SELECT column_1
FROM XXX
WHERE column_1 BETWEEN '2021-05-12' - INTERVAL 2 YEAR AND '2021-05-12';
上面的查询有些琐碎,因为我们知道日期字面量早 2 年是 2019-05-12
。但是,如果您使用的是列而不是日期文字,则相同的逻辑会起作用。
您在 MS SQL 中的代码是:
WHERE column_1 BETWEEN DATEADD(Year, -2, '2021-05-12') and '2021-05-12'
BETWEEN
在处理日期时不推荐使用。在此示例中,可能会选择 5 月 12 日两次(如果 column_1
是 date
)或 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'