转换儒略日期CYYDDD为DD / MM / YYYY

时间:2019-06-13 02:43:57

标签: sql-server tsql date date-conversion jdedwards

我在SQL Server的表中有一列,该列以朱利安格式(CYYDDD)存储日期。我正在该字段上运行选择SQL,并希望将日期格式转换为DD / MM / YYYY。

尝试了几种SQL进行格式转换,但没有一个给我正确的输出

DATEADD(dd, (@jdate - ((@jdate/1000) * 1000)) - 1, dateadd(yy, @jdate/1000, 0))

DATEADD(year, XHUPMJ / 1000, 0) + DATEADD(day, XHUPMJ % 1000, 0) - 1

想查看格式为DD / MM / YYYY的日期输出,后面没有任何0。

我在列中有一个儒略日期值,为115351,我希望它可以转换为17/12/2015

2 个答案:

答案 0 :(得分:2)

我从此site找到了一个示例代码,将儒略日期转换为DD / MM / YYYY格式

DECLARE @Sample AS VARCHAR(6) = '115351'
SELECT CONVERT(VARCHAR(10), DATEADD(DAY, CONVERT(INT, @Sample) - ((1000*(CONVERT(INT, @Sample)/1000)))-1, DATEADD(YEAR, CONVERT(INT, @Sample/1000), '1 Jan 1900')), 103) AS Result

它将转换为2015年的第351天,因此结果将为17/12/2015

Demo on db<>fiddle


更新:

cars10m suggested in the comment一样,使用%模运算符,可以将上述查询简化为

DECLARE @Sample AS VARCHAR(6) = '115351'
SELECT CONVERT(VARCHAR(10), DATEADD(DAY, CONVERT(INT, @Sample) % 1000 -1, DATEADD(YEAR, CONVERT(INT, @Sample/1000), '1 Jan 1900')), 103) AS Result

答案 1 :(得分:0)

您想要这个答案吗?

SELECT DATEADD(day, CAST(RIGHT(Variable,3) AS int) / 1, CONVERT(datetime,LEFT(Variable,2) + '0101', 103))