在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的时间部分?


当前回答

CAST(round(cast(getdate()as real),0,1) AS datetime)

此方法不使用字符串函数。日期基本上是一种真实的数据类型,小数点前的数字是一天的小数。

我猜这个会比很多快。

其他回答

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

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

CONVERT(DATE, getdate(), 101)

在这里,我做了一个函数来删除SQL Server的日期时间的某些部分。用法:

第一个参数是要剥离的datetime。 第二个参数是char类型: S:转到秒;删除毫秒 M:数到分钟;删除秒和毫秒 H:转到小时;删除分钟、秒和毫秒。 D:轮到天;删除小时、分钟、秒和毫秒。 返回新的日期时间

创建函数dbo。uf_RoundDateTime(@dt作为datetime, @part作为char) 返回日期时间 作为 开始 如果CHARINDEX(@part, 'smhd',0) = 0返回@dt; 返回演员( 案例@part 当's'时,convert(varchar(19), @dt, 126) 当'm'时,则convert(varchar(17), @dt, 126) + '00' 当'h'时,则convert(varchar(14), @dt, 126) + '00:00' 当'd'时,convert(varchar(14), @dt, 112) 结束为datetime) 结束

把插入/更新的时间放在首位。至于动态转换,没有什么能比得上用户定义函数的可维护性:

select date_only(dd)

date_only的实现可以是你喜欢的任何东西——现在它被抽象了,调用代码更加简洁。

我非常喜欢:

[date] = CONVERT(VARCHAR(10), GETDATE(), 120)

120格式代码将强制将日期转换为ISO 8601标准:

'YYYY-MM-DD' or '2017-01-09'

在dplyr (R)和pandas (Python)中超级容易使用!