将儒略日期转换为 YYYY-MM-DD
Convert Julian Date to YYYY-MM-DD
我进行了广泛的搜索,但似乎找不到将 julian 转换为 yyyy-mm-dd
的方法。
这是我的朱利安的格式:
Julian 格式由年份、前两位数字和一年中的日期、后三位数字组成。
例如95076
就是March 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
您可以 select 日期的每个部分使用 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)
这个returnsMarch, 17 1995 00:00:00
.
我将 20 连接到我的 JD,然后 运行
DATEADD(YEAR, LAST_CHANGE_DATE / 1000 - 1900, LAST_CHANGE_DATE % 1000 - 1)
这让我得到了结果。谢谢!!!
对于 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
Set @Date = Dateadd(day,+ Cast(right(@Julian,3) as int)-1, Cast(left(@Julian,4) + '0101' as Date))
Select @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))
我进行了广泛的搜索,但似乎找不到将 julian 转换为 yyyy-mm-dd
的方法。
这是我的朱利安的格式:
Julian 格式由年份、前两位数字和一年中的日期、后三位数字组成。
例如95076
就是March 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
您可以 select 日期的每个部分使用 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)
这个returnsMarch, 17 1995 00:00:00
.
我将 20 连接到我的 JD,然后 运行
DATEADD(YEAR, LAST_CHANGE_DATE / 1000 - 1900, LAST_CHANGE_DATE % 1000 - 1)
这让我得到了结果。谢谢!!!
对于 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
Set @Date = Dateadd(day,+ Cast(right(@Julian,3) as int)-1, Cast(left(@Julian,4) + '0101' as Date))
Select @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))