我想根据特定日期查询表,但问题是该字段的数据类型为datetime如何通过日期查询Datetime对象?
select * from Supplier where modified_Date='2011-05-07 12:52:16.830'
该查询返回结果
但
select * from Supplier where modified_Date='2011-05-07'
有没有结果
我想根据特定日期查询表,但问题是该字段的数据类型为datetime如何通过日期查询Datetime对象?
select * from Supplier where modified_Date='2011-05-07 12:52:16.830'
该查询返回结果
但
select * from Supplier where modified_Date='2011-05-07'
有没有结果
SQL Server 2008的数据类型为DATE
。您可以将您的DATETIME
投射到DATE
并进行比较。
SELECT *
FROM Supplier
WHERE CAST(Modified_Date AS DATE) = '2011-05-07'
您必须考虑时间因素,因为2011-05-07 <> 2011-05-07 12:52:16.830
切换到一个范围类型的查询
select * from Supplier where
modified_Date >= '2011-05-07'
and
modified_Date < '2011-05-08'
...或者因为你使用SQL Server 2008
select * from Supplier where
CAST(modified_Date AS date) = '2011-05-07'
从性能的角度转换为日期,使用第一个。或者有一个索引计算列,可为您执行CAST并在此过滤此数据类型SQL Server 2008的数据类型为
转换列到日期的选择查询将带来的结果。
刚刚发布的替代语法GBN的回答,您还可以使用BETWEEN
:
SELECT *
FROM Supplier
WHERE modified_Date BETWEEN '2011-05-07' AND '2011-05-07 23:59:59:999'
编辑:你必须指定的结束时间为BETWEEN
默认为午夜这将在此返回附加行案件。
从BOL:
返回TRUE之间。如果 与test_expression的值大于或 等于与begin_expression 的值且小于或等于 end_expression的值,。
从性能角度来看,SQL Server 2008会将第二个转换成类似第一个的东西。 – 2011-05-23 10:11:52
@Martin:是吗?目前无法测试。想到这个虽然https://connect.microsoft.com/SQLServer/feedback/details/653206/the-optimizer-should-be-able-to-understand-the-invertability-of-built-in-intrinsics-on- date-for-the-index-index-sargability – gbn 2011-05-23 10:17:32
是的,它为计划添加了一个计算标量,该范围的两端都要查找。请参阅http://connect.microsoft.com/SQLServer/feedback/details/526431/make-more-functions-sargable – 2011-05-23 10:19:05