您好,我正在尝试为公历到儒略日期和儒略到公历创建一个函数,以便我将来可以在报告/查询/vbs 脚本中使用这些函数,而不必将其包含在以后的所有内容中。这是针对 Oracle 数据库的,我们使用的公历日期格式是 ddmmyyyy。我尝试使用下面的命令返回今天的朱利安日期,但到目前为止我没有运气从格雷格转换为朱利安日期。
select sysdate, to_char(sysdate,'YDDD') "YDDD" from dual;
Oracle 对儒略日期的内置支持有限:
SELECT TO_NUMBER (TO_CHAR (SYSDATE, 'J')) TO_JULIAN, TO_DATE (2457259, 'J') TO_GREGORIAN FROM DUAL
有一个有用的链接这里您可以使用。
格鲁吉亚语到朱利安语
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')
您可以使用这些转换示例:
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 中有效。
这些都不起作用。 我希望将系统日期更改为儒略日期。
我的应用程序的 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,所以这不起作用
看起来这个问题仍然需要一些工作才能找到真正有效的答案。