SQL WHERE子句条件评估

时间:2014-12-13 14:54:16

标签: sql date where-clause

我有一个简单的问题,但是我无法找到答案。在SQL WHERE子句中哪个更好?

TO_CHAR (DAT, 'YYYYMMDD') BETWEEN '20080101' AND '20131231'

DAT BETWEEN TO_DATE('20080101','YYYYMMDD') AND TO_DATE('20131231','YYYYMMDD')

条件值是仅评估一次,然后针对表中的每一行进行测试,还是SQL引擎每次都重新计算它?

2 个答案:

答案 0 :(得分:1)

任何涉及常量和文字的参数都只会被评估一次。然而,第二个更好 - 它允许您索引dat列,然后使用此索引来提高性能,而第一个查询将不允许使用索引。

答案 1 :(得分:1)

这是最好的:

“ 2008-01-01”和“ 2013-12-31”之间的日期

SQL也具有日期/时间类型的文字,因此不需要调用任何这些标量函数。

顺便说一句,您标记了问题SQL。这意味着您的问题与标准SQL有关,而不与任何特定引擎和/或其实现的方言有关(将鼠标悬停在标记上并阅读其内容)。该标准规定了本示例中使用的日期格式。特定引擎可能支持日期文字的其他格式,例如“ 2013年12月31日”或“ 2013年12月31日”。