不要在SQL中格式化日期。 使用DATE文字!

我看到人们一直在这样做。 他们想将日期或时间戳常量添加到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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值