gpt4 book ai didi

mysql - SQL 用于在日期字段中选择当前月份,然后仅当当前日期大于某个日期时

转载 作者:行者123 更新时间:2023-11-29 12:39:27 26 4
gpt4 key购买 nike

此 sql 与 mysql 数据库不起作用:

SELECT *
FROM `house1_rent_2014`
WHERE MONTH( `FIRST_OF_MONTH` ) = MONTH( NOW() )
AND DATE_ADD(MONTH(`FIRST_OF_MONTH`,INTERVAL 15 DAY) <= CURDATE();

我想要做的是从列 FIRST_OF_MONTH 中获取所有当前月份值(它本身就可以正常工作),然后添加附加测试(如果它是日期字段中的当前月份值并且今天的日期大于)当月 15 日,然后选择该日期。换句话说,如果今天是 9/15 或更高版本,则字段具有 2014-09-01(同样,我只需要当前月份的日期字段),然后选择它。

我混淆了语法,也许还有正确的逻辑。感谢您的帮助

最佳答案

您的语法比需要的要复杂得多,而且我认为规范也过于困惑。

“从 FIRST_OF_MONTH 列获取所有当前月份值”

您是否也想返回去年 9 月的值? (MONTH() 函数仅返回月份值(1 到 12),不包括年份,这看起来有点奇怪。

要获取“当前月份”的行,我们通常会执行以下操作:

 WHERE t.first_of_month >= DATE_FORMAT(NOW(),'%Y-%m-01') 
AND t.first_of_month < DATE_FORMAT(NOW(),'%Y-%m-01') + INTERVAL 1 MONTH

“裸列”上的谓词允许 MySQL 有效地利用索引,在本例中,是对前导列为first_of_month 的索引进行范围扫描。如果我们将这些列包装在一个函数中,那么 MySQL 必须在表中的每一行上计算该函数。

“然后添加附加测试如果它是当前月份值当然在日期字段中并且今天的日期大于当前月份的 15 号然后选择该测试”

您已经有一个谓词来检查“当前月份”中的日期,无需重复。

如果当前日期在 15 日之后,则该谓词的计算结果为 TRUE;如果当前日期为 15 日或更早,则返回 FALSE。

   AND DATE(NOW()) > DATE_FORMAT(NOW(),'%Y-%m-15')
<小时/>

示例

如果表中有这些行:

row  first_of_month
--- --------------
1 2014-09-30
2 2014-10-02
3 2014-10-14
4 2014-10-16
5 2014-10-31
6 2014-11-01

如果我们使用这些谓词运行查询:

 WHERE t.first_of_month >= DATE_FORMAT(NOW(),'%Y-%m-01') 
AND t.first_of_month < DATE_FORMAT(NOW(),'%Y-%m-01') + INTERVAL 1 MONTH
AND DATE(NOW()) > DATE_FORMAT(NOW(),'%Y-%m-15')

如果 DATE(NOW()) 返回 '2014-10-11',则第三个谓词的计算结果将为 FALSE,并且不会返回任何行。

如果DATE(NOW())返回'2014-10-16',则返回当月包含first_of_month的所有行,即:示例数据中的第 2 行到第 5 行。

如果 DATE(NOW()) 返回 '2014-11-07',则第三个谓词为 false,并且不返回任何行。

如果DATE(NOW())返回'2014-09-25',则查询将返回示例数据中的第1行。

关于mysql - SQL 用于在日期字段中选择当前月份,然后仅当当前日期大于某个日期时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com