Pie*_*ers 89 sql-server-2005 sql-server
在 SQL Server 2005 中,如何获取没有时间部分的当前日期?我一直在使用,GETDATE()但希望它的时间为 00:00:00.0
gbn*_*gbn 127
该最快的,如果你有遍历一个记录,并且没有日期在SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
StackOverflow 上的两个不同且出色的答案证明了这一点:One , Two
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 方法是不安全的。
此处的其他答案指出您永远不会将其应用于列。这是正确的,但您可能希望选择 100k 行或添加计算列或仅按日期分组。那你就得用这个方法了。
另一个答案还提到了样式 110。这不是语言或 SET DATEFORMAT 安全的,并且因“英国”语言设置而失败。请参阅Tibor Karaszi的 datetime 数据类型最终指南。
您必须将其转换为 varchar 指定格式模式(在本例中为 110),然后转换(或转换)回日期时间。
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
281082 次 |
| 最近记录: |