在SQL Server中从datetime字段中删除时间部分时,哪种方法提供了最佳性能?

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

or

b) select cast(convert(char(11), getdate(), 113) as datetime)

第二种方法确实发送了更多的字节,但这可能没有转换速度那么重要。

两者看起来也都非常快,但在处理数十万行或更多行的时候,速度可能会有所不同。

此外,是否可能有更好的方法来消除SQL中datetime的时间部分?


当前回答

select CONVERT(char(10), GetDate(),126)

其他回答

以防有人在这里寻找一个Sybase版本,因为上面的几个版本都不能工作

CAST(CONVERT(DATE,GETDATE(),103) AS DATETIME)

在Adaptive Server 15.7上运行的I SQL v11中测试

在SQL Server 2008中,有一个DATE数据类型(也是一个TIME数据类型)。

CAST(GetDate() as DATE)

or

declare @Dt as DATE = GetDate()

我会用:

CAST
(
CAST(YEAR(DATEFIELD) as varchar(4)) + '/' CAST(MM(DATEFIELD) as varchar(2)) + '/' CAST(DD(DATEFIELD) as varchar(2)) as datetime
) 

因此,有效地从已有的日期字段创建一个新字段。

在SQL Server 2008中,您可以使用:

CONVERT(DATE, getdate(), 101)

如何选择cast(cast my_datetime_field as date) as datetime)?结果是相同的日期,时间设置为00:00,但避免了任何文本转换,也避免了任何显式的数字舍入。