gpt4 book ai didi

sql - 比较 MySQL "Time"字段与 PHP 中的字符串

转载 作者:可可西里 更新时间:2023-11-01 07:29:30 24 4
gpt4 key购买 nike

我的数据库中有一个特定的行,包含以下信息:

    data:

user_id start_time end_time
405 12:00:00 14:00:00

我有以下 SELECT 语句:

       SELECT *
FROM data
INNER join users on users.user_id = data.user_id
WHERE NOT EXISTS
(SELECT * FROM data
WHERE '10:00:00' BETWEEN start_time AND end_time)
GROUP BY users.usrID");

现在,我认为这个查询会返回上面的行(用户 405),但是,它不会返回任何人。 (因为 10:00:00 不在 12:00:00 和 14:00:00 之间)。

有趣的是,如果我将值 10:00:00 更改为 07:00:00,它可以正常工作。

关于为什么这不起作用的任何想法?在数据库中,我将字段设置为 TIME,它们的格式如下:00:00:00

非常感谢!

更新:

我将查询更改为如下所示:

SELECT usrID, 
first,
last
FROM users
WHERE user_id NOT IN (SELECT u.user_id
FROM `data` d,
`users` u
WHERE d.user_id = u.user_id
AND CAST('10:00:00' AS TIME) BETWEEN start_time AND end_time)
ORDER BY u.user_id

这似乎可以解决问题。感谢所有帮助。

最佳答案

根据 between 的 MySQL 手册页:

“为了在将 BETWEEN 与日期或时间值一起使用时获得最佳结果,您应该使用 CAST() 将值显式转换为所需的数据类型。示例:如果将 DATETIME 与两个 DATE 值进行比较,则将 DATE 值转换为DATETIME 值。如果您在与 DATE 的比较中使用字符串常量(例如“2001-1-1”),请将该字符串转换为 DATE。”

尝试:

SELECT *
FROM data
INNER join users on users.user_id = data.user_id
WHERE NOT EXISTS
(
SELECT *
FROM data
WHERE CAST('10:00:00' AS TIME) BETWEEN start_time AND end_time
)
GROUP BY users.usrID

如果没有显式类型转换,MySQL 可能会将时间值转换为字符串文字以进行比较,而不是将字符串文字转换为时间值。

关于sql - 比较 MySQL "Time"字段与 PHP 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1585505/

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