gpt4 book ai didi

sql - sysdate 的 to_date 函数问题

转载 作者:行者123 更新时间:2023-12-02 05:19:29 26 4
gpt4 key购买 nike

我看到了这个question所以我对这个问题有一个疑问:我在以下查询中得到相同日期的不同结果。

SELECT TO_CHAR(to_date(sysdate, 'DD-MON-yy'), 'DAY'),
TO_CHAR(to_date(sysdate, 'DD-MON-yyyy'), 'DAY'),
TO_CHAR(to_date(sysdate, 'DD-MON-rr'), 'DAY'),
TO_CHAR(to_date(sysdate, 'DD-MON-rrrr'), 'DAY')
FROM dual;

按列输出:

TUESDAY SUNDAY TUESDAY TUESDAY

请帮助我,在此先感谢。

编辑

我写了一个简单的程序,它通过日期来查找下面给出的日期:

SET serveroutput ON;
CREATE OR REPLACE
PROCEDURE simple_test
(
date_in IN VARCHAR2)
IS
v_date DATE := to_date(date_in,'dd-mon-yyyy');
v_day VARCHAR2(10):=TO_CHAR(v_date,'day');
BEGIN
dbms_output.put_line('the day of given date is '||v_day);
END;
/

执行简单测试(系统日期);

anonymous block completed
the day of given date is sunday

EXEC simple_test('01-JAN-2013');

anonymous block completed
the day of given date is tuesday

为什么会这样?

最佳答案

我想解释一下为什么你会得到不同的结果。

查看此 sqlfiddle

正如已经说过的,sysdate 被视为 DATE 类型,并且您在进行隐式转换时

select to_date(sysdate, format) from dual;

因为 to_date 的第一个参数应该是 varchar 类型,系统会这样做:

select to_date(to_char(sysdate), format) from dual;

因为您的隐式日期格式是 'DD-MON-YY',您的查询进入:

SELECT TO_CHAR(to_date('01-JAN-13', 'DD-MON-yy'), 'DAY'),
TO_CHAR(to_date('01-JAN-13', 'DD-MON-yyyy'), 'DAY'),
TO_CHAR(to_date('01-JAN-13', 'DD-MON-rr'), 'DAY'),
TO_CHAR(to_date('01-JAN-13', 'DD-MON-rrrr'), 'DAY')
FROM dual;

第二个 to_date,因为 yyyy 是完整的千年格式,转到“01-JAN-0013”,即公元 13 日,可能是星期日 :)

关于sql - sysdate 的 to_date 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14108840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com