设置格式后尝试插入数据,但出现时间格式错误
ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY';
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,
TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);
ora-01843 我想知道如何处理不同的时间格式,我在其他代码中遇到过几种不同的时间格式
在
alter session set nls_date_language = 'english'
之后;现在可以正常插入数据了,怎么设置都有新问题
ALTER SESSION SET NLS_DATE_FORMAT='mon-dd-YYYY';
或 ALTER SESSION SET NLS_DATE_FORMAT='yyyy.dd.mon';
我插入的数据没有任何变化
不是每种语言都缩写一年的第一个月 作为
"JAN"
。
看来你想要
ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH'
或者,或者考虑转换文本月份名称 在将它们交给数据库之前对数字进行处理。
处理日期的方式多种多样;您所要做的就是确保您可以控制它。不要依赖隐式数据类型转换并插入字符串而不是日期。并且 - 如果您插入日期,请以正确的格式进行。这里有几个例子:
SQL> create table test (datum date);
Table created.
使用日期文字,它总是由
date
关键字和日期值组成,用单引号括起来,格式为 yyyy-mm-dd
:
SQL> insert into test values (date '2023-03-27');
1 row created.
使用具有适当格式模型的
to_date
功能:
SQL> insert into test values (to_date('27.03.2023', 'dd.mm.yyyy'));
1 row created.
to_date
再次,但这次月份是 spelled - 在这种情况下,请指定您使用的language:
SQL> insert into test values (to_date('mar-27-2023', 'mon-dd-yyyy', 'nls_date_language = english'));
1 row created.
改变会话以便 string - 以该格式和语言输入 - 被正确识别:
SQL> alter session set nls_date_format = 'yyyy.dd.mon';
Session altered.
SQL> alter session set nls_date_language = 'croatian';
Session altered.
SQL> insert into test values ('2023.27.ožu');
1 row created.
SQL>
根据上次
NLS_DATE_FORMAT
,这是表格内容:
SQL> select * from test;
DATUM
-----------
2023.27.ožu
2023.27.ožu
2023.27.ožu
2023.27.ožu
如果我改变会话并设置不同:
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> select * from test;
DATUM
----------
27.03.2023
27.03.2023
27.03.2023
27.03.2023
SQL>
Or, I can use `to_char` function with any valid format model:
SQL> select to_char(datum, 'yyyy-mon-dd', 'nls_date_language = english') from test;
TO_CHAR(DAT
-----------
2023-mar-27
2023-mar-27
2023-mar-27
2023-mar-27
SQL>