将公历日期转换为儒略日期

问题描述 投票:0回答:4

您好,我正在尝试为公历到儒略日期和儒略到公历创建一个函数,以便我将来可以在报告/查询/vbs 脚本中使用这些函数,而不必将其包含在以后的所有内容中。这是针对 Oracle 数据库的,我们使用的公历日期格式是 ddmmyyyy。我尝试使用下面的命令返回今天的朱利安日期,但到目前为止我没有运气从格雷格转换为朱利安日期。

select sysdate, to_char(sysdate,'YDDD') "YDDD" from dual;
oracle-database datetime vbscript
4个回答
1
投票

Oracle 对儒略日期的内置支持有限:

SELECT TO_NUMBER (TO_CHAR (SYSDATE, 'J')) TO_JULIAN, TO_DATE (2457259, 'J') TO_GREGORIAN FROM DUAL


0
投票

有一个有用的链接这里您可以使用。

格鲁吉亚语到朱利安语

CREATE OR REPLACE FUNCTION DATE2JDE (yyyymmdd IN NUMBER)
RETURN NUMBER
IS
v_jdedate NUMBER(6,0) := 0;

BEGIN
IF yyyymmdd BETWEEN 19000000 AND 28000000 THEN
v_jdedate := TO_NUMBER(TO_CHAR(TO_DATE(yyyymmdd,'YYYYMMDD'),'YY YYDDD'))-1900000;
ELSE
RAISE_APPLICATION_ERROR(-20000, 'Invalid date in DATE2JDE - ' || yyyymmdd ||'.');
END IF;

RETURN(v_jdedate);

END;

朱利安语到格鲁吉亚语

v_oracle_date := to_date(to_char(v_JDEDate+1900000),'YYYYDDD')
v_char_year := to_char(to_date(to_char(v_JDEDate+1900000),'YYYYDD D'),'YYYY')
v_char_month := to_char(to_date(to_char(v_JDEDate+1900000),'YYYYDD D'),'MM')
v_char_day := to_char(to_date(to_char(v_JDEDate+1900000),'YYYYDD D'),'DD')
v_num_year := to_number(to_char(to_date(to_char(v_JDEDate+190000 0),'YYYYDDD'),'YYYY')
v_num_month := to_number(to_char(to_date(to_char(v_JDEDate+190000 0),'YYYYDDD'),'MM')
v_num_day := to_number(to_char(to_date(to_char(v_JDEDate+190000 0),'YYYYDDD'),'DD')

0
投票

您可以使用这些转换示例:

select  to_char('2017-06-24 13:27:14','YYYY-MM-DD','nls_calendar=persian') from dual

或者这个

select  to_char(sysdate,'YYYY-MM-DD','nls_calendar=persian') from dual

这项工作在 oracle 12c 中有效。


0
投票

这些都不起作用。 我希望将系统日期更改为儒略日期。

我的应用程序的 Sysdate 在 Oracle SQL Developer 查询中显示为“22-NOV-24”。

使用第一条评论中的选项时:

TO_NUMBER (TO_CHAR (SYSDATE, 'J')) TO_JULIAN -- 2024 年 11 月 22 日的结果为 2460637,所以这不起作用

TO_DATE (2457259, 'J') TO_GREGORIAN -- 结果为 2024 年 11 月 22 日 24-AUG-15,所以这不起作用

看起来这个问题仍然需要一些工作才能找到真正有效的答案。

© www.soinside.com 2019 - 2024. All rights reserved.