以下是我使用的内容:
SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME)
我认为可能会有更好更优雅的方式。
要求:
datetime
类型,而不是字符串。答案 0 :(得分:110)
答案 1 :(得分:30)
SQL Server 2008有一个新的date data type,这将此问题简化为:
SELECT CAST(CAST(GETDATE() AS date) AS datetime)
答案 2 :(得分:18)
SELECT CAST(CONVERT(char(8), GETDATE(), 112) AS datetime)
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
SELECT CAST(CAST(GETDATE() - 0.50000004 AS int) AS datetime)
你的技巧(投射到 float )是由该杂志4月刊的读者提出的。据他介绍,它的性能可与上述第二种技术相媲美。
答案 3 :(得分:12)
您的CAST
- FLOOR
- CAST
似乎已经成为最佳方式,至少在MS SQL Server 2005上是这样。
我见过的其他一些解决方案有一个字符串转换,比如Select Convert(varchar(11), getdate(),101)
,它慢了10倍。
答案 4 :(得分:4)
请尝试:
SELECT CONVERT(VARCHAR(10),[YOUR COLUMN NAME],105) [YOURTABLENAME]
答案 5 :(得分:1)
SQL2005:我建议使用cast而不是dateadd。例如,
select cast(DATEDIFF(DAY, 0, datetimefield) as datetime)
我的数据集
平均大约10%更快select DATEADD(DAY, DATEDIFF(DAY, 0, datetimefield), 0)
(并且铸造成smalldatetime的速度更快)