繁体   English   中英

为MariaDB获取正确的SQL查询语法

[英]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_dateDATEDATETIME还是TIMESTAMP

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM