我的数据库中有一个特定的行,包含以下信息:
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/