我正在编写一个查询,我需要计算自以"YYYYMMDD"格式存储在数据库中的日期以来的天数。由于这不是 Date 数据类型,因此我无法使用本机 Date 函数。在 SQL 查询中执行此类计算的最佳方法(性能方面、可读性方面等)是什么。
最好? 将该旧表转换为使用实际日期列。
下一个最佳? 编写一个数据库函数以将 YYMMDD 转换为实际日期。Alan Campin的iDate可以提供帮助。 你最终会得到类似于select cvty2d(date1)-cvty2d(date2) from ...
聊胜于无? 编写丑陋的SQL将数字转换为字符,拆分字符,添加连字符并将其转换为实际日期。 那只野兽看起来像
select
date(
substr(char(date1),1,4) concat
'-' concat
substr (char(date1),5,2) concat
'-' concat
substr(char(date1),7,2)
) -
date(
substr(char(date2),1,4) concat
'-' concat
substr (char(date2),5,2) concat
'-' concat
substr(char(date2),7,2)
)
from ...
编辑这些体操是必要的原因是 DB2 DATE() 函数希望看到 'YYYY-MM-DD' 形式的字符串,其中连字符是必需的。
您运行的是哪个版本的 SQL? SQL2008 将该格式作为日期数据类型没有问题
Declare @something nvarchar(100)
set @Something = '20120112'
select dateadd(dd, 1, @Something)
select datediff(dd, @Something, getdate())
2012-01-13 00:00:00.000
118