gpt4 book ai didi

sql - 从 MySQL 中的日、月、年字段创建日期

转载 作者:IT老高 更新时间:2023-10-28 12:59:47 26 4
gpt4 key购买 nike

我目前正在开发一个应用程序,它显示文档并允许成员通过许多不同的参数搜索这些文档,其中一个参数是日期范围。

我遇到的问题是数据库架构不是我自己开发的,数据库的创建者创建了一个“日期”表,其中包含“日”、“月”、“年”的字段。

我想知道如何从表中选择特定的日、月、年并在 SQL 中创建一个日期对象,以便我可以比较用户使用 BETWEEN 输入的日期。

下面是日期表的结构:

CREATE TABLE IF NOT EXISTS `date` (
`deposition_id` varchar(11) NOT NULL default '',
`day` int(2) default NULL,
`month` int(2) default NULL,
`year` int(4) default NULL,
PRIMARY KEY (`deposition_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

最佳答案

当您有年、月和日的整数值时,您可以通过组合 MAKEDATE() 和 DATE_ADD() 来创建 DATETIME。固定日期为 1 的 MAKEDATE() 将为您提供给定年份的第一天的 DATETIME,然后您可以使用 DATE_ADD() 添加月份和日期:

mysql> SELECT MAKEDATE(2013, 1);
+-------------------+
| MAKEDATE(2013, 1) |
+-------------------+
| 2013-01-01 |
+-------------------+

mysql> SELECT DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH);
+---------------------------------------------------+
| DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH) |
+---------------------------------------------------+
| 2013-03-01 |
+---------------------------------------------------+

mysql> SELECT DATE_ADD(DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH), INTERVAL (11)-1 DAY);
| DATE_ADD(DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH), INTERVAL (11)-1 DAY) |
+----------------------------------------------------------------------------------+
| 2013-03-11 |
+----------------------------------------------------------------------------------+

所以回答OP的问题:

SELECT * FROM `date`
WHERE DATE_ADD(DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH), INTERVAL (day)-1 DAY)
BETWEEN '2013-01-01' AND '2014-01-01';

关于sql - 从 MySQL 中的日、月、年字段创建日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3960049/

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