我看到人们一直在这样做。 他们想将日期或时间戳常量添加到SQL查询中,并且他们知道的唯一函数是TO_DATE()
或TO_TIMESTAMP()
日期解析函数:
SELECT TO_DATE ('20150801', 'yyyymmdd')
FROM DUAL;
例如, 在此Stack Overflow问题中观察到 :
TO_DATE ('20150801', 'yyyymmdd') AS DAY_20150801_TOTAL,
TO_DATE ('20150802', 'yyyymmdd') AS DAY_20150802_TOTAL,
TO_DATE ('20150803', 'yyyymmdd') AS DAY_20150803_TOTAL,
TO_DATE ('20150804', 'yyyymmdd') AS DAY_20150804_TOTAL,
TO_DATE ('20150805', 'yyyymmdd') AS DAY_20150805_TOTAL,
TO_DATE ('20150806', 'yyyymmdd') AS DAY_20150806_TOTAL,
TO_DATE ('20150807', 'yyyymmdd') AS DAY_20150807_TOTAL,
TO_DATE ('20150808', 'yyyymmdd') AS DAY_20150808_TOTAL,
TO_DATE ('20150809', 'yyyymmdd') AS DAY_20150809_TOTAL,
TO_DATE ('20150810', 'yyyymmdd') AS DAY_20150810_TOTAL,
TO_DATE ('20150811', 'yyyymmdd') AS DAY_20150811_TOTAL, [...]
仅当您的日期输入确实以字符串形式存储在表中并以自定义格式存储并且您要操纵日期时,日期分析才重要。 如果您使用日期常量,请使用DATE文字或TIMESTAMP文字节省一些时间并提高可读性。
这是一个例子:
SELECT
DATE '2015-08-01' AS d,
TIMESTAMP '2015-08-01 15:30:00' AS ts
FROM DUAL;
大多数主要的RDBMS支持上述SQL标准文字。 这些应使用的日期格式是ISO 8601格式。 这些文字的优点:
- 它们实际上是常量,因此,它们仅由SQL解析器而不是执行引擎解析(例如,放入
WHERE
子句时) - 它们比其他任何选项都更具可读性
总的来说,只有微小的事情才有很大的不同。
翻译自: https://www.javacodegeeks.com/2015/09/dont-format-dates-in-sql-use-the-date-literal.html