获取正确的MariaDB SQL查询语法

时间:2019-09-06 17:25:50

标签: sql mariadb sqlanywhere

我正在将一些SQL查询转换为针对MariaDB运行,而不是通过SQL Anywhere运行。我需要更新的查询的一部分如下所示:

and datepart(mm,c.dob) = datepart(mm,today()) + 1

查阅了一些MariaDB文档后,我认为第二部分可能需要这样:

MONTH(NOW()) + 1

但是,我不确定如何从原始行重新创建逻辑,因为在MariaDB中未使用datepart。当我尝试此操作时,查询将运行:

and MONTH(c.dob) = MONTH(NOW()) + 1

这看起来像是正确的替换语法吗?

1 个答案:

答案 0 :(得分:0)

在函数调用中隐藏列可防止使用索引。尝试避免这种情况。

进行日期算术时,请使用以下语法:

 date_value + INTERVAL 4 DAY

如果使用MONTH(NOW()),您应该在12月看到什么?

您可以将日期视为2019-09-06格式的字符串,因此这是获取当前月份开始的一种方法:

mysql> SELECT NOW(), CONCAT(LEFT(CURDATE(), 7), '-01');
+---------------------+-----------------------------------+
| NOW()               | CONCAT(LEFT(CURDATE(), 7), '-01') |
+---------------------+-----------------------------------+
| 2019-09-06 11:38:37 | 2019-09-01                        |
+---------------------+-----------------------------------+

因此,即使在12月,这也可以给您下个月的开始:

CONCAT(LEFT(CURDATE(), 7), '-01') + INTERVAL 1 MONTH

比较日期通常比分隔日期更可取-我想到的是12月的问题。还有leap日。

WHERE my_date >= CONCAT(LEFT(CURDATE(), 7), '-01') + INTERVAL 1 MONTH

将检查my_date是下个月(或更晚)。无论my_dateDATEDATETIME还是TIMESTAMP,这都行得通。

但是,由于dob是“出生日期”,因此我所说的大部分内容都是无关紧要的,您确实需要MONTH(dob)