SQL 中的日期比较
Date Comparison in TSQL
为什么下面的每条returns记录:
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CreatedDate < '20151214'
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CreatedDate > '20151214'
而下面的查询没有?
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CreatedDate = '20151214'
我必须使用带有相等运算符的 CAST
来获得我想要的结果:
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CAST(CreatedDate as DATE) = '2015-12-14'
有没有不用强制转换就可以使用相等运算符的方法?
CreatedDate
是 DATETIME
类型,包括时间。
可能 CreatedDate
包含时间部分(例如 datetime
类型)。这就是 =
不能开箱即用的原因。当您将其转换为 date
时,时间部分将被删除,然后 =
比较工作正常。
DATEDIFF
是检查 SQL 中日期是否相等的首选方法,除非您使用较新的 DATE
类型(而不是 DATETIME
)。
转换为 DATE
会删除任何时间部分。
DATEDIFF
可能也更强大(比 <>=)
为什么下面的每条returns记录:
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CreatedDate < '20151214'
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CreatedDate > '20151214'
而下面的查询没有?
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CreatedDate = '20151214'
我必须使用带有相等运算符的 CAST
来获得我想要的结果:
SELECT Name, CreatedDate
FROM EmployeeTable
WHERE CAST(CreatedDate as DATE) = '2015-12-14'
有没有不用强制转换就可以使用相等运算符的方法?
CreatedDate
是 DATETIME
类型,包括时间。
可能 CreatedDate
包含时间部分(例如 datetime
类型)。这就是 =
不能开箱即用的原因。当您将其转换为 date
时,时间部分将被删除,然后 =
比较工作正常。
DATEDIFF
是检查 SQL 中日期是否相等的首选方法,除非您使用较新的 DATE
类型(而不是 DATETIME
)。
转换为 DATE
会删除任何时间部分。
DATEDIFF
可能也更强大(比 <>=)