在SQL Server 2008中截断日期时间值(如删除小时、分钟和秒)的最佳方法是什么?
例如:
declare @SomeDate datetime = '2009-05-28 16:30:22'
select trunc_date(@SomeDate)
-----------------------
2009-05-28 00:00:00.000
在SQL Server 2008中截断日期时间值(如删除小时、分钟和秒)的最佳方法是什么?
例如:
declare @SomeDate datetime = '2009-05-28 16:30:22'
select trunc_date(@SomeDate)
-----------------------
2009-05-28 00:00:00.000
当前回答
这个查询应该会给出与Oracle中的trunc(sysdate)相同的结果。
SELECT *
FROM your_table
WHERE CONVERT(varchar(12), your_column_name, 101)
= CONVERT(varchar(12), GETDATE(), 101)
希望这能有所帮助!
其他回答
为了得到更完整的答案,这里有一种截断到任何日期部分的工作方法,包括分钟(用要截断的日期替换GETDATE())。
这与公认的答案不同,因为你不仅可以使用dd (days),还可以使用任何日期部分(见这里):
dateadd(minute, datediff(minute, 0, GETDATE()), 0)
注意,在上面的表达式中,0是一年开始时的一个常数日期(1900-01-01)。如果需要截断为更小的部分,例如秒或毫秒,则需要取一个更接近要截断的日期的常数日期,以避免溢出。
仅适用于SQL Server 2008
CAST(@SomeDateTime AS Date)
然后将其转换回datetime
CAST(CAST(@SomeDateTime AS Date) As datetime)
TRUNC(aDate, 'DD')将截断分钟,秒和小时
SRC: http://www.techonthenet.com/oracle/functions/trunc_date.php
这个查询应该会给出与Oracle中的trunc(sysdate)相同的结果。
SELECT *
FROM your_table
WHERE CONVERT(varchar(12), your_column_name, 101)
= CONVERT(varchar(12), GETDATE(), 101)
希望这能有所帮助!
你可以这样做(SQL 2008):
@SomeDate date = getdate()
select @SomeDate
2009-05-28