我有以下查询:
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值中查询时间?
如何找到不在这些时间段内的所有值? 不在......之间。
答案 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';