仅在日期的时间部分使用Between

时间:2011-09-21 18:23:05

标签: mysql sql

我有以下查询:

SELECT COUNT(*) FROM leads WHERE create_date > '06:00' AND create_date < '18:00';
SELECT COUNT(*) FROM leads WHERE create_date > '06:00' AND create_date < '18:00';

然而,create_date列看起来像'2011-08-26 10:18:01',我想在这些时间段之间找到所有内容,无论当天如何。

如何从create_date值中查询时间?

如何找到不在这些时间段内的所有值? 不在......之间。

4 个答案:

答案 0 :(得分:3)

要获取该日期的时间,您可以使用TIME()功能。

SELECT COUNT(*) FROM leads WHERE TIME(create_date) > '06:00' AND create_date < '18:00';
SELECT COUNT(*) FROM leads WHERE TIME(create_date) > '06:00' AND create_date < '18:00';

要查找超出此范围的时间,只需反转where子句中的所有内容。

SELECT COUNT(*) FROM leads WHERE TIME(create_date) < '06:00' AND create_date > '18:00';
SELECT COUNT(*) FROM leads WHERE TIME(create_date) < '06:00' AND create_date > '18:00';

答案 1 :(得分:2)

使用TIME() function仅返回DATETIME列的时间部分。

SELECT COUNT(*) FROM leads WHERE TIME(create_date) > '06:00' AND TIME(create_date) < '18:00';

要查找这些时间段之外的值,请使用

SELECT COUNT(*) FROM leads WHERE TIME(create_date) <= '06:00' AND TIME(create_date) >= '18:00';

答案 2 :(得分:2)

假设create_date的类型为DATETIME,要提取时间部分仅使用TIME(create_date)。

是的,NOT BETWEEN将获得逆集。

答案 3 :(得分:2)

你可以投射到时间:

SELECT COUNT(*) FROM leads WHERE TIME(create_date) > '06:00' AND TIME(create_date) < '18:00';