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

问题描述

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

column_1

这很好用,SELECT column_1 FROM XXX WHERE column_1 BETWEEN ADDDATE(date('2021-05-10'),INTERVAL 2 YEAR) 只返回给定日期两年内的日期。

但是,我正在尝试将其转换为 MysqL 语法,这是我尝试过的:

<Text />

但这不仅会返回两年范围内的日期,还会返回其他年份的日期,我在这里遗漏了什么吗?谢谢。

解决方法

您在 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,'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。但是,如果您使用的是列而不是日期文字,则相同的逻辑会起作用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...