sql-server - 将儒略日期 CYYDDD 转换为 DD/MM/YYYY

标签 sql-server tsql date date-conversion jdedwards

我在 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

最佳答案

我从这个 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

关于sql-server - 将儒略日期 CYYDDD 转换为 DD/MM/YYYY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56572698/

相关文章:

SQL - 计算有序列表中的更改次数

javascript - 使用javascript,将日期字符串与夏令时进行比较

c# - 实体属性值 (EAV) 框架?

sql - 在列上执行数学的更优雅的方式

sql-server - SSRS 并忽略 "having"子句

sql - 从同一张表的 2 个部分中减去两个不同的列

java - 获取基于Java中UTC偏移量的时区快捷方式

sql - 基于变量组合的标志

c# - ExecuteNonQuery() 返回受影响的意外行数 C#

sql - 获取表中的最后一项 - SQL