我有一个简单的问题,但是我无法找到答案。在SQL WHERE子句中哪个更好?
TO_CHAR (DAT, 'YYYYMMDD') BETWEEN '20080101' AND '20131231'
或
DAT BETWEEN TO_DATE('20080101','YYYYMMDD') AND TO_DATE('20131231','YYYYMMDD')
条件值是仅评估一次,然后针对表中的每一行进行测试,还是SQL引擎每次都重新计算它?
答案 0 :(得分:1)
任何涉及常量和文字的参数都只会被评估一次。然而,第二个更好 - 它允许您索引dat
列,然后使用此索引来提高性能,而第一个查询将不允许使用索引。
答案 1 :(得分:1)
这是最好的:
“ 2008-01-01”和“ 2013-12-31”之间的日期
SQL也具有日期/时间类型的文字,因此不需要调用任何这些标量函数。
顺便说一句,您标记了问题SQL
。这意味着您的问题与标准SQL有关,而不与任何特定引擎和/或其实现的方言有关(将鼠标悬停在标记上并阅读其内容)。该标准规定了本示例中使用的日期格式。特定引擎可能支持日期文字的其他格式,例如“ 2013年12月31日”或“ 2013年12月31日”。