繁体   English   中英

将儒略日期转换为 YYYY-MM-DD

[英]Convert Julian Date to YYYY-MM-DD

我已经进行了广泛的搜索,但似乎找不到将 julian 转换为yyyy-mm-dd

这是我的朱利安的格式:

Julian 格式由年份(前两位数字)和一年中的日期(最后三位数字)组成。

例如, 95076March 17, 1995 95表示年份, 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

您可以使用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))

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

用这个:

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

例如:

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

这将返回March, 17 1995 00:00:00

SQLFiddle

我将 20 连接到我的 JD,然后运行DATEADD(YEAR, LAST_CHANGE_DATE / 1000 - 1900, LAST_CHANGE_DATE % 1000 - 1)

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

FOR SQL 用户DECLARE @jdate VARCHAR(10) SET @jdate = 117338 SELECT dateadd(dd, (@jdate - ((@jdate/1000) * 1000)) - 1, dateadd(yy, @jdate/1000, 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'))

您需要在第一个字符中为世纪指定 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))

声明@Julian varchar(7)

声明@date 日期

设置@Julian = 2020277

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

选择@Date

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

声明@julDate int = 2020275

Select 
DateAdd
(
   day
   , Right(@julDate,3)-1
   , Cast((Left(@julDate,4)+'-01-01') as smalldatetime)
)

试试这个:

DECLARE @jdate int

SET @jdate = 21243

select dateadd(dd, (@jdate - ((@jdate/1000) * 1000)) - 1, dateadd(yy, @jdate/1000+100, 0))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM