gpt4 book ai didi

mysql - 在mysql中选择两个日期之间的类别

转载 作者:行者123 更新时间:2023-11-29 11:31:59 25 4
gpt4 key购买 nike

我在 mysql 中有这个表。我想在“start_date”和“end_date”之间选择数据作为“rc_type”。

+----+--------+------------+------------+                     
| id | rc_type| start_date | end_date |
+----+--------+------------+------------+
| 1 | Gold | 16-05-2016 | 22-05-2016 |
| 2 | Silver | 20-05-2016 | 29-05-2016 |
+----+--------+------------+------------+

我的 html 表单有这三个字段。那么如何找到rc_type呢?

enter image description here

我尝试过这个查询:

SELECT * FROM room_inventory WHERE rc_type='silver' BETWEEN '16-05-2016' AND '17-05-2016'

还有:

SELECT * FROM room_inventory WHERE start_date >= '16-05-2016' AND end_date <= '17-05-2016' AND rc_type='Gold' 

如果我选择开始日期为 2016 年 5 月 16 日,结束日期为 2016 年 5 月 17 日,并选择“白银”类别,我会得到“黄金”类别的结果。实际上这两个日期之间没有银型。

我没有得到正确的数据。请帮助获取正确的数据。

最佳答案

您需要将表示形式与实际数据类型分开,即最好将日期列转换为实际日期格式而不是 varchar。但是,为了获得正确的结果,您需要将这些字符串转换为正确的日期:

SELECT
*
FROM
room_inventory
WHERE
rc_type = 'Silver'
AND STR_TO_DATE(start_date, '%d-%m-%Y') > STR_TO_DATE('15-05-2016', '%d-%m-%Y')
AND STR_TO_DATE(end_date, '%d-%m-%Y') < STR_TO_DATE('30-05-2016', '%d-%m-%Y');

输出:

+----+---------+------------+------------+
| id | rc_type | start_date | end_date |
+----+---------+------------+------------+
| 2 | Silver | 20-05-2016 | 29-05-2016 |
+----+---------+------------+------------+
1 row in set

如果您不进行此类转换,您将得到如下错误结果(我已将 Silver 的结束日期更改为 29-06-2016):

输入:

mysql> select * from room_inventory;
+----+---------+------------+------------+
| id | rc_type | start_date | end_date |
+----+---------+------------+------------+
| 1 | Gold | 16-05-2016 | 22-05-2016 |
| 2 | Silver | 20-05-2016 | 29-06-2016 |
+----+---------+------------+------------+
2 rows in set

查询:

SELECT
*
FROM
room_inventory
WHERE
rc_type = 'Silver'
AND start_date > '15-05-2016'
AND end_date < '30-05-2016';

输出(错误):

+----+---------+------------+------------+
| id | rc_type | start_date | end_date |
+----+---------+------------+------------+
| 2 | Silver | 20-05-2016 | 29-06-2016 |
+----+---------+------------+------------+
1 row in set

这是因为 MySQL 执行逐个字符比较并决定 29-06-2016 < 30-05-2016这是错误的。因此,一般来说,如果您将日期列保留为 varchar 格式,则会遇到更多问题。

关于mysql - 在mysql中选择两个日期之间的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37250049/

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