【发布时间】:2011-04-27 07:32:20
【问题描述】:
通常我需要从GETDATE() 中删除时间信息。我需要这个,因为我有一些 DateTime 字段,我知道我只存储日期信息,以便进行可靠的比较(MyDate < GETDATE())我需要从GETDATE() 中删除时间信息)。当然,我可以在MyDate 中使用DATE 数据类型,但这对于新应用程序是可以的,而不是旧应用程序。
我以前用CAST 来做,但因为在SQL Server 2008 中也有DATE 数据类型,所以它看起来更易读。
旧方法
DECLARE @Today DateTime
SET @Today = (CAST(FLOOR(CAST( GETDATE() AS FLOAT)) AS DATETIME))
select @Today
新方法
DECLARE @TodayDate Date
Set @TodayDate = GETDATE()
select @TodayDate
我可以选择第二个还是有任何警告? (当然我只使用 2008 年!)
【问题讨论】:
-
不清楚你需要什么。请用列描述表格并写下您要更改的内容。
-
我只需要 TODAY DATE 作为参考,因为我在 WHERE 条件下使用它,例如
where MyTable.Date >= @Today。如果我使用where MyTable.Date >= GetDate()我不会得到正确的结果,因为 GetDate 还包含时间信息。 -
MyTable.Date>=CAST(GetDate() as date) 就足够了。
-
是的,你是对的,这也是一种选择。我正在寻找“今天没有时间信息”的紧凑版本的原因是在同一个查询中我可能会多次使用它。所以想象一下,比起
CAST(GETDATE() AS DATE),我更喜欢写@Today 10 倍。
标签: sql-server sql-server-2008 date getdate