SQL Server 2014中Julian/Ordinal日期转换为标准日期的实现方法
SQL Server Julian/Ordinal日期转标准日期方案
你要转换的2020121属于YYYYDDD格式的序数日期(前4位为年份,后3位为当年的第N天),可以通过日期偏移计算实现转换,具体方案如下:
单值转换示例
DECLARE @JulianStr VARCHAR(7) = '2020121' -- 输出格式为'2020-04-30' SELECT CONVERT(VARCHAR(10), -- 序数减1后叠加到当年1月1日 DATEADD(DAY, CAST(RIGHT(@JulianStr, 3) AS INT) - 1, -- 提取前4位拼接为当年1月1日 CAST(LEFT(@JulianStr, 4) + '0101' AS DATE) ), 23) AS StandardDate
逻辑说明
LEFT(@JulianStr, 4)提取前4位年份,拼接0101得到当年1月1日的日期值RIGHT(@JulianStr, 3)提取后3位日序,转整数后减1(因为1月1日是第1天,偏移量为0),通过DATEADD叠加到1月1日上得到目标日期CONVERT函数的第三个参数23对应YYYY-MM-DD的输出格式
表字段批量转换示例
如果需要处理表中的整列数据,直接替换变量为对应字段即可:
SELECT julian_date_column, CONVERT(VARCHAR(10), DATEADD(DAY, CAST(RIGHT(julian_date_column, 3) AS INT) - 1, CAST(LEFT(julian_date_column, 4) + '0101' AS DATE) ), 23) AS standard_date FROM your_table_name
注意事项
- 需确保输入的Julian日期为7位合法字符串:前4位为有效年份,后3位取值在1~366之间(闰年对应最大366),非法值会触发转换报错
- 如果你的业务中使用的是6位Julian日期(如
20121代表2020年第121天),需要先根据业务规则补全4位年份后再执行上述逻辑
内容的提问来源于stack exchange,提问作者Inaam Muaz
相关产品推荐
相关产品推荐

