我正在使用现有数据库,其中所有日期都按以下格式存储为整数:yyyy [一年中3位数字]。
例如:
2010-01-01 == 2010001
2010-12-31 == 2010365
我正在使用以下SQL转换为日期时间:
DATEADD(d,
CAST(SUBSTRING(
CAST(NEW_BIZ_OBS_DATE AS VARCHAR), 5, LEN(NEW_BIZ_OBS_DATE) - 4
) AS INT) - 1,
CAST('1/1/' + SUBSTRING(CAST(NEW_BIZ_OBS_DATE AS VARCHAR),1,4) AS DATETIME))
有没有人有更简洁的方法来做到这一点?
答案 0 :(得分:2)
你可以用数字代替而不是使用字符串:
dateadd(day, NEW_BIZ_OBS_DATE % 1000 - 1,
dateadd(year, NEW_BIZ_OBS_DATE / 1000 - 2000, '2000-1-1')
)
(请注意,2010356不是2010-12-31,而是2010-12-22。2010365是2010-12-31。)
答案 1 :(得分:0)
我认为至少可以进行一次简化:
DATEADD(d,
NEW_BIZ_OBS_DATE % 1000 - 1,
CAST('1/1/' + SUBSTRING(CAST(NEW_BIZ_OBS_DATE AS VARCHAR),1,4) AS DATETIME)
)
我认为第二个术语也可以按照以下方式完成。
CAST('1/1/' + CAST(NEW_BIZ_OBS_DATE/1000 AS VARCHAR) AS DATETIME)