MYSQL - 检索日期之间的时间戳

时间:2010-01-11 21:24:02

标签: sql mysql datetime

所有

我有一个名为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查询语法吗? 感谢

4 个答案:

答案 0 :(得分:14)

SELECT timestamp
FROM   tablename
WHERE  timestamp >= userStartDate
       AND timestamp < userEndDate + INTERVAL 1 DAY

如果这些字段的类型为userStartDate(没有时间部分),则会选择日期部分在userEndDateDATE之间的每条记录。

如果开始日期和结束日期以字符串形式出现,请使用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`";