SQL Server:将Julian Date转换为YYYY-MM-DD

时间:2015-11-05 16:48:42

标签: sql sql-server julian-date

我搜索的范围很广,但我似乎无法找到将朱利安转换为yyyy-mm-dd的方法。

以下是我的朱利安的格式:

Julian格式包括年份,前两位数字和一年中的日期,最后三位数字。

例如,95076March 17, 199595表示年份和年份 076表示这是一年中的第76天。

15260

我试过这个,但它不起作用:

dateadd(d,(convert(int,LAST_CHANGED_DATE) % 1000)-1, convert(date,(convert(varchar,convert(int,LAST_CHANGED_DATE) /1000 + 1900) + '/1/1'))) as GrgDate

8 个答案:

答案 0 :(得分:6)

您可以使用datepart()

选择日期的每个部分
SELECT DATEPART(yy, 95076), DATEPART(dy, 95076)

+++编辑:我误解了一些东西。这是我的更正:+++++

SELECT DATEADD(day, CAST(RIGHT('95076',3) AS int) – 1, CONVERT(datetime,LEFT('95076',2) + '0101', 112))

答案 1 :(得分:1)

编辑:为Oracle和MySQL用户留下这个答案
这在T-SQL中不起作用。

使用此:

MAKEDATE(1900 + d / 1000, d % 1000)

例如:

SELECT MAKEDATE(1900 + 95076 / 1000, 95076 % 1000)

返回March, 17 1995 00:00:00

SQLFiddle

答案 2 :(得分:0)

我将20连接到我的JD,然后运行 My.PCL.MyPage'1[T]

这让我得到了结果。谢谢!!!

答案 3 :(得分:0)

针对SQL用户 DECLARE @jdate VARCHAR(10) SET @jdate = 117338 SELECT dateadd(dd, (@jdate - ((@jdate/1000) * 1000)) - 1, dateadd(yy, @jdate/1000, 0))

答案 4 :(得分:0)

这肯定在所有情况下都有效。

DECLARE @date int
SET @date = 21319
SELECT DATEADD(dd, RIGHT(@date,LEN(@date)-3)-1, DATEADD(yy,LEFT(@date,1)*100 +RIGHT(LEFT(@date,3),2),'1 Jan 1900'))

答案 5 :(得分:0)

您需要在第一个字符中为世纪指定1或0。例如,SET @date = 21319的前缀应为1或0。下面是一个适用于所有y2k用例的示例。

DECLARE @jdate INT 
SET @jdate = 119150 
SELECT DATEADD(dd, (@jdate - ((@jdate/1000) * 1000)) - 1, DATEADD(yy, @jdate/1000, 0))

答案 6 :(得分:0)

声明@Julian varchar(7)

声明@date日期

设置@Julian = 2020277

设置@Date = Dateadd(day,+ Cast(right(@ Julian,3)作为int)-1,Cast(left(@ Julian,4)+'0101'作为Date))

选择@日期

答案 7 :(得分:0)

标准SQL很简单(您可以对2位数的年份YYMMDD做类似的操作)

声明 private val binding = LayoutHorizontalFilterBinding.inflate(LayoutInflater.from(context), this, true)

@julDate int = 2020275