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-DD
是date'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';
我正在使用 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-DD
是date'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';