ano*_*ery 6 sql sql-server comparison datetime date
我基于date
等于datetime
字段的字段返回行.他们显然只是在格式时直接匹配,dd/MM/yyyy = dd/MM/yyyy 00:00:00
但我想忽视时间.
我尝试了3种方法,它们都有效,但我想知道什么是最好的.
1 - CONVERT(varchar(10),MyDate,103) = CONVERT(varchar(10),MyDateTime,103))
2 - MyDate = CONVERT(date,MyDateTime)
3 - MyDate = CAST(MyDateTime AS date)
4 - MyDate = DATEADD(dd, DATEDIFF(dd, 0, MyDateTime), 0)
对我来说,#1应该是最慢的,转换为字符串然后使用字符串比较肯定应该是最低效的.但在测试中它是最快的!以下是我的测试:
1 - 303ms平均
平均2 - 284毫秒
3 - 平均273毫秒
平均4 - 1745毫秒
测试的样本量约为300,000
是否有一个原因?第一种选择真的是最好的选择吗?
编辑:更改测试值以反映为300k记录每次运行10次的测试.除了DATEADD/DATEDIFF
Tim Schmelter提到的方法之外,改变结果以显示所有结果非常相似.这似乎是效率最低的.
我想说#3 是最好的选择。这是我的理由。
表演工作你已经做了,我就不重做了。您更新的数字显示选项 1-3 非常相似,因此我们可以将性能放在一边,但排除#4。
一旦性能确定下来,接下来就是最佳实践和可读性。#1 对于大多数代码来说绝对是最难阅读的,所以我会排除这一点。同样的原因也适用于已经排除的#4。
这给我们留下了#2 和#3。我选择#3,因为 CAST 是 SQL 标准的一部分,并且比 CONVERT 更可移植。因此,当您不需要 CONVERT 的特殊功能时,我建议始终使用 CAST。
归档时间: |
|
查看次数: |
13172 次 |
最近记录: |