【发布时间】:2015-10-27 09:16:16
【问题描述】:
select to_char(sysdate, 'DAY') from dual; 将正确返回TUESDAY。
但是为什么我当天运行select to_char(to_date(sysdate, 'DD-MON-YYYY'), 'DAY') from dual;,却返回SUNDAY?
由于在尝试运行 select to_date('27-OCT-15', 'D') from dual; 时出现 ORA-01835: day of week conflicts with Julian date 错误,我必须在尝试获取日期之前将日期(我动态传递给函数)转换为 DD-MON-YYYY 格式一周。有谁知道我为什么会看到这种不一致?
这里有一个更好的例子(我在例子中替换了列名和表名)。
SELECT DATE,
to_char(DATE, 'DAY'),
to_char(to_date(DATE, 'DD-MON-YYYY'), 'DAY')
FROM DATES
ORDER BY DATE;
结果是;
DATE TO_CHAR(D TO_CHAR(T
--------- --------- ---------
19-OCT-15 MONDAY SATURDAY
19-OCT-15 MONDAY SATURDAY
19-OCT-15 MONDAY SATURDAY
21-OCT-15 WEDNESDAY MONDAY
21-OCT-15 WEDNESDAY MONDAY
02-NOV-15 MONDAY SATURDAY
02-NOV-15 MONDAY SATURDAY
【问题讨论】:
-
我得到的是
ORA-01843: not a valid month,而不是SUNDAY。您的服务器的默认日期格式是什么? -
因为
to_date返回一周的第一天-SUNDAY -
@ÁlvaroG.Vicario 不能 100% 确定这是否是您要查找的内容,但我的
NLS_DATE_LANGUAGE是AMERICAN。 -
to_date(sysdate?真的吗? sysdate 是一个日期,您不需要将日期转换为日期。 -
@Dr R Dizzle 系统日期或日期,没关系。 TO_DATE 将 CHAR、VARCHAR2、NCHAR 或 NVARCHAR2 数据类型的字符转换为 DATE 数据类型的值。如果你输入日期数据类型,那么你应该准备好隐式类型转换和 nls 设置的任何问题。