GETDATE()
,但希望它的时间为00:00:00.0 #1 楼
如果必须遍历记录集并且在SQL Server 2008中没有日期,最快的方法是SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
在StackOverflow上有两个不同的出色答案:两次
Varchar转换是最糟糕的方法之一。当然,对于一个值可能并不重要,但这是一个很好的习惯。
这种方法也是确定性的,比如说要索引计算列。即使是写SQL Server书籍的人也被日期时间转换所困扰
该技术也是可扩展的。
昨天:
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
月初:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
上个月底:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
下个月月初:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
编辑:
正如我提到的关于确定性的问题,除非使用样式112,否则varchar方法是不安全的。
此处的其他答案指出,您永远不会将其应用于列。这是正确的,但是您可能要选择10万行或添加计算列或GROUPBY dateonly。然后,您必须使用此方法。
另一个答案也提到了样式110。这不是语言或SET DATEFORMAT安全的语言,并且设置为“ british”语言时失败。请参阅Tibor Karaszi关于日期时间数据类型的最终指南。
#2 楼
您必须将其转换为指定格式格式的varchar(在这种情况下为110),然后转换(或强制转换)为日期时间。select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
评论
提供的链接无效。
– Vishwanath Dalvi
18年7月25日在10:02