首页 > 解决方案 > 这是最快的日期比较方式

问题描述

有一列是日期类型,但是程序中传递的参数是字符串,我可以将此列转换为字符串还是将传递的参数转换为日期然后比较它们?

标签: sql-servertsql

解决方案


很容易推理出这个:

如果你保留一个字符串,SQL 将对于每一行都必须将日期(时间)列的值转换为字符串,然后进行比较。在具有数百万行的表上,这将是一项昂贵的操作,因为它需要对每一行都执行此操作。

如果将字符串参数转换为日期时间,SQL 可以直接与每一行的转换值进行比较。

除了以上这些,只要停下来思考一下就可以很简单地推理出来,还有很多像Larnu1 指出的陷阱;只有相等才会起作用(最好的情况),大于,小于,之间,这样就不会像预期的那样起作用。

此外,日期(时间)比较会快很多,因为它是一个 8 字节*值,可以与 CPU 上的单个指令(或很少)进行比较,而不必迭代字符串中的所有字符进行比较.

查找Sargeability ; 转换为日期时间的另一个参数。

最好的办法是一起摆脱字符串并期望通过日期时间。这使您的界面更清楚地传达了您的需求(并且还排除了日期/时间转换的问题,例如 2020 年 6 月 2 日,是 6 月 2 日还是 2 月 6 日还是...?)。

*根据您使用的确切日期时间类型,这可能会有所不同。


推荐阅读