3

我在 SQL Server 的表中有一个列,它以 Julian 格式 (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

我在列中有一个 Julian Date 值,115351我希望它转换为17/12/2015

4

2 回答 2

3

我从这个站点找到了一个示例代码,将 Julian Date 转换为 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

db<>fiddle 上的演示


更新:

正如cars10m 在评论中建议的那样,使用%模数运算符,上面的查询可以简化为

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
于 2019-06-13T03:10:37.950 回答
0

这是你想要的答案吗?

SELECT DATEADD(day, CAST(RIGHT(Variable,3) AS int) / 1, CONVERT(datetime,LEFT(Variable,2) + '0101', 103))
于 2019-06-13T02:55:18.490 回答