为什么我设置了时间格式,还是报错

问题描述 投票:0回答:2

设置格式后尝试插入数据,但出现时间格式错误

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';
我插入的数据没有任何变化 enter image description here

oracle plsqldeveloper
2个回答
1
投票

不是每种语言都缩写一年的第一个月 作为

"JAN"
。 看来你想要

ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH'

或者,或者考虑转换文本月份名称 在将它们交给数据库之前对数字进行处理。


0
投票

处理日期的方式多种多样;您所要做的就是确保您可以控制它。不要依赖隐式数据类型转换并插入字符串而不是日期。并且 - 如果您插入日期,请以正确的格式进行。这里有几个例子:

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>
© www.soinside.com 2019 - 2024. All rights reserved.