所有
我有一个名为timestamp的MYSQL表。它是DATETIME
数据类型,其值类似于“10/1/2009 3:25:08 PM',”10/1/2009 3:30:05 PM',“10/4/2009 3:40 :01 PM'等等。
我想编写一个SQL查询来选择两个日期之间的时间戳字段中的所有值。这样的事情:
select timestamp from tablename where timestamp >= userStartDate and timestamp <= userEndDate
userInput日期没有时间部分。你能为此建议正确的MySQL查询语法吗? 感谢
答案 0 :(得分:14)
SELECT timestamp
FROM tablename
WHERE timestamp >= userStartDate
AND timestamp < userEndDate + INTERVAL 1 DAY
如果这些字段的类型为userStartDate
(没有时间部分),则会选择日期部分在userEndDate
和DATE
之间的每条记录。
如果开始日期和结束日期以字符串形式出现,请使用STR_TO_DATE
转换为任何给定格式:
SELECT timestamp
FROM tablename
WHERE timestamp >= STR_TO_DATE('01/11/2010', '%m/%d/%Y')
AND timestamp < STR_TO_DATE('01/12/2010', '%m/%d/%Y') + INTERVAL 1 DAY
答案 1 :(得分:8)
SELECT timestamp
FROM myTable
WHERE timestamp BETWEEN startDate AND endDate
为了在
BETWEEN
上使用日期或时间值时获得最佳效果,您应该使用CAST()
将值显式转换为所需的数据类型。示例:如果您将DATETIME
与两个DATE
值进行比较,请将DATE
值转换为DATETIME
值。如果您在'2001-1-1'
的比较中使用字符串常量(例如DATE
),请将字符串转换为DATE
。
-
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between
答案 2 :(得分:4)
userInput日期没有时间戳。您可以使用以下命令将用户输入转换为时间戳:
mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');
-> 1196440219
您的查询可以变为:
select timestamp from tablename
where timestamp >= UNIX_TIMESTAMP(userStartDate)
and timestamp <= UNIX_TIMESTAMP(userEndDate)
答案 3 :(得分:2)
如果您要查询两个时间戳之间的事件,对于日历或将开始和结束存储为时间戳的内容,您可以使用此
$qry = "SELECT *
FROM `table`
WHERE '$today_start' >= `event_start`
AND '$today_start' <= `event_end`";