Oracle 中的 TO_CHAR

TO_ CHAR in oracle

我正在使用 oracle 11G,我知道 TO_CHAR 用于将数据转换为字符,此查询将完美地获取特定日期的日期:

SELECT TO_CHAR (DATE '2019-08-15', 'Day') FROM DUAL;

但这行不通:

SELECT TO_CHAR (DATE '15-08-2019', 'Day') FROM DUAL;  

ERROR: ORA-01847: day of month must be between 1 and last day of month

SELECT TO_CHAR (DATE '15-aug-19', 'Day') FROM DUAL; 

ERROR: ORA-01843: not a valid month

为什么上面的方法不起作用。我检查了 NLS_DATE_FORMAT 它显示“DD-MON-RR”。但在第一个查询中它是“YYYY-MM-DD”。

我在这里错过了什么?

因为YYYY-MM-DDdate'YYYY-MM-DD'中关于ANSI 92 SQL标准的字符串文字格式。

其他格式类型需要显式转换,如to_date('15-08-2019','dd-mm-yyyy')

这个问题完全是由于您的 NLS 设置造成的。如果您 运行 下面的查询,您可以看到数据库的当前 NLS 参数值

SELECT * FROM NLS_DATABASE_PARAMETERS

如果您想更改日期的 nls 参数,请在 运行 下面查询

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYYY';