MySQL 中基于 MSSQL 语法按 YEAR 选择日期范围的等效语法是啥?

Posted

技术标签:

【中文标题】MySQL 中基于 MSSQL 语法按 YEAR 选择日期范围的等效语法是啥?【英文标题】:What's the equivalent syntax in MySQL for selecting date ranges by YEAR based on MSSQL syntax?MySQL 中基于 MSSQL 语法按 YEAR 选择日期范围的等效语法是什么? 【发布时间】:2021-05-12 10:00:20 【问题描述】:

我有一个 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)

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

【问题讨论】:

样本输入数据、所需输出数据和当前输出数据会有所帮助。但是,尽管我远非 MySQL 专家,但关于第二个 where 子句的某些内容对我来说似乎是错误的,因为您似乎只将一个值传递给 between,那么另一个界限在哪里? 【参考方案1】:

您在 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'

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

您好,谢谢,它有效,应该是2 YEAR 而不是2 DAY:) @Cecilia 今天咖啡不够。

以上是关于MySQL 中基于 MSSQL 语法按 YEAR 选择日期范围的等效语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

怎么把mssql改为mysql

如何在 MySQL 8(如 MSSQL)上使用表达式作为 LAG() 第二个参数?

SQLServer和MySql语法和关键字的区别详解

MSSQL 中,怎么批量删除 _WA _sys 开头自动创建的索引

mysql 常用语法