1

我正在编写一个查询,我需要计算自以“YYYYMMDD”格式存储在数据库中的日期以来的天数。由于这不是 Date 数据类型,因此我不能使用本机 Date 函数。在 SQL 查询中执行此类计算的最佳方法是什么(性能方面、可读性方面等)。

4

2 回答 2

3

最好的?将该旧表转换为使用真实日期列。

下一个最好的?编写一个数据库函数将 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' 形式的字符串,连字符是必需的。

于 2012-05-09T19:20:50.640 回答
0

您正在运行哪个版本的 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

于 2012-05-09T18:52:11.920 回答