约会

2011-09-21 71 views
0

的只有时间部分之间使用我有以下查询:约会

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值查询时间?

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

+0

请注意,使用'TIME()'会影响索引的实用性,因为它在每一行都进行计算。 – ceejayoz

回答

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'; 
+0

谢谢。但是,反向符号似乎不起作用。我以0结束,这在我的数据库中是不可能的。 – ATMathew

+0

在任何情况下,如您所述,“不BETWEEN”将起作用。 –

+0

对不起,ORs应该是AND。 –

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

假设CREATE_DATE是类型DATETIME的,以提取的时间部分只能使用TIME(CREATE_DATE)。

是的,不是BETWEEN会得到反向设置。

2

您可以直接转换为TIME:

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