比较SQL Server 2005中DateTime数据类型的时间部分

Mig*_*elo 10 sql-server sql-server-2005

如何只比较SQL Server 2005中DateTime数据类型的时间部分?例如,我想获取MyDateField在特定时间之后的所有记录.以下示例是一个非常长且可能不快的方法.我想要MyDateField大于12:30:50.400的所有日期

SELECT *
FROM   Table1
WHERE      ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) = 50) AND (DATEPART(millisecond, MyDateField) > 400))
        OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) = 30) AND (DATEPART(second, MyDateField) > 50))
        OR ((DATEPART(hour, MyDateField) = 12) AND (DATEPART(minute, MyDateField) > 30))
        OR ((DATEPART(hour, MyDateField) > 12))
Run Code Online (Sandbox Code Playgroud)

Luk*_*keH 13

SELECT *
FROM Table1
WHERE DATEADD(day, -DATEDIFF(day, 0, MyDateField), MyDateField) > '12:30:50.400'
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 5

这个怎么样?

SELECT (fields)
FROM dbo.YourTable
WHERE DATEPART(HOUR, MyDate) >= 12
  AND DATEPART(MINUTE, MyDate) >= 23
  AND DATEPART(SECOND, MyDate) >= 45
Run Code Online (Sandbox Code Playgroud)

小时以24小时格式给出,例如12表示中午12小时,15表示下午3点.

DATEPART还有分数,秒等的"部分".您当然可以根据需要在WHERE子句中使用尽可能多的日期部分.

  • 我认为这不会起作用.该查询将在下午12:30:48但不在下午2:00:00匹配,因为分钟部分与标准不匹配.太糟糕了,你没有得到SQL '05中的'time`类型...... (3认同)