[英]Getting the Correct SQL Query Syntax for MariaDB
我正在将一些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
这看起来像正确的替换语法吗?
将列隐藏在函数调用中可防止使用索引。 尽量避免这种情况。
在进行日期算术时,请使用如下语法:
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 |
+---------------------+-----------------------------------+
因此,这将为您提供下个月的开始,甚至是十二月:
CONCAT(LEFT(CURDATE(), 7), '-01') + INTERVAL 1 MONTH
比较日期通常比分隔日期更可取-我想到的是12月的问题。 和leap日。
WHERE my_date >= CONCAT(LEFT(CURDATE(), 7), '-01') + INTERVAL 1 MONTH
将检查my_date
是下个月(或更晚)。 无论my_date
是DATE
, DATETIME
还是TIMESTAMP
。
但是,由于dob
是“出生日期”,因此我所说的大部分内容都不相关,您确实需要MONTH(dob)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.