MySQL日期时间小于功能


MySQL Datetime Less Than Functionality

我有一个带有一些日期时间列的表。我需要能够在同一列的两个日期时间之间选择行。

例如:

SELECT *
FROM `t_punchcards`
WHERE UserID = 'root' AND
      PunchInTime > CAST('01-01-2015 00:00:00' AS DATETIME) AND
      PunchInTime < CAST('03-06-2015 23:59:59' AS DATETIME);

出于某种奇怪的原因,这没有产生任何结果。我尝试过使用BETWEEN,我尝试过不从字符串转换为datetime(只使用原始字符串),我尝试了<=>=。我很失落。

作为旁注,删除第二个约束(AND PunchInTime<CAST('03-06-2015 23:59:59'As DATETIME);事实上将产生结果。是否不允许对同一查询中的同一列进行比较?

下面是一个表格示例:

UserID(varchar)      PunchInTime(datetime)    PunchOutTime(datetime)
root                 01-01-2015 8:02:31       01-01-2015 12:35:51

只需将此逻辑写成:

WHERE UserID = 'root' AND
      PunchInTime > DATE('2015-01-01') AND
      PunchInTime < DATE('2015-03-07')

请注意,我从第二个值中删除了时间成分。这是一种更干净的比较方式,除非你真的想把一天的最后几毫秒与一天中的其他时间区别对待。

注意:如果您不使用MySQL,或者您想要更兼容的代码,以下内容适用于更多的数据库:

WHERE UserID = 'root' AND
      PunchInTime > CAST('2015-01-01' as DATETIME) AND
      PunchInTime < CAST('2015-03-07' as DATETIME)