我根据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 - 273ms 平均
4 - 1745ms 平均
测试来自约 300,000 的样本量
是否有一个原因?第一个选项真的是最好的选择吗?
编辑:更改了测试值以反映每个 300k 记录运行 10 次的测试。DATEADD/DATEDIFF
除了下面提到的 Tim Schmelter 方法之外,更改结果以显示所有内容都非常相似。这似乎是迄今为止效率最低的。