每当我试图插入这个查询时,我都会得到一个错误。
CREATE TABLE dateOfBirth(dateOfBirth date);
INSERT INTO dateOfBirth(dateOfBirth)VALUES('1967-11-17');我得到了一个错误:
ORA-01843:无效月份
发布于 2021-07-03 10:34:04
让我试试你的代码:
SQL> CREATE TABLE dateOfBirth(dateOfBirth date);
Table created.
SQL> INSERT INTO dateOfBirth(dateOfBirth)VALUES('1967-11-17');
INSERT INTO dateOfBirth(dateOfBirth)VALUES('1967-11-17')
*
ERROR at line 1:
ORA-01861: literal does not match format string
SQL>也不起作用,但是-失败了,有一个不同的错误。
基本上,这就是当您试图将字符串输入date数据类型列时发生的事情(我的意思是--您会得到错误)。虽然乍一看很清楚--如果你把'1967-11-17'插入到dateOfBirth中--有人出生于1967年11月17日。不幸的是,甲骨文对此并不那么热心。它将尝试隐式转换字符串到目前为止,但正如您可以看到的,在您和我的情况下,它不幸失败。
此外,如果你试图输入例如12-07-05。这串是什么?12年(可能是)、月份(可能)还是一天(也可能是)?07和05也是如此。简单地说,不要这样做,不要依赖于从任何事物到其他事物的隐式转换。
那么,你能做些什么呢?显然,插入一个有效的DATE数据类型值!多么?例如:
date 'yyyy-mm-dd':SQL>插入出生日期(出生日期)值(日期'1967-11-17');创建一行。
to_date函数:SQL>插入出生日期(出生日期)值(to_date(‘17.11.1967,’dd.mm.yyyy‘);创建一行.
SQL> altered设置nls_date_format =‘yyyy dd’;会话更改。SQL>插入dateOfBirth(DateOfBirth)值(‘1967-11-17’);创建一行.
有很多种选择。因此,如果你控制了它,就不会有问题了。
发布于 2021-07-03 10:26:01
insert语句试图将字符串挤压到date列中。为了允许这种情况发生,Oracle必须使用隐式转换,这将使用会话NLS参数。在您的示例中,隐式转换不适用于您给它的字符串。
隐式转换是结束损坏数据或错误的简单方法(正如您现在看到的),您应该始终使用显式转换,以便无论会话的设置是什么,都可以确保字符串以正确的日期格式进行转换:
CREATE TABLE dateOfBirth(dateOfBirth date);
INSERT INTO dateOfBirth(dateOfBirth)VALUES(to_date('1967-11-17','yyyy-mm-dd'));将数据作为日期存储在表中后,可以使用您喜欢的任何日期格式显示数据:
select to_char(dateOfBirth,'dd/mm/yyyy') dateOfBirth from dateOfBirth;或者,您可以由客户端的会话设置来决定如何显示它(使它成为客户端的责任,以使其正确)。
select dateOfBirth from dateOfBirth;https://stackoverflow.com/questions/68234362
复制相似问题