Oracle中的数据类型

Posted

技术标签:

【中文标题】Oracle中的数据类型【英文标题】:data type in Oracle 【发布时间】:2021-12-31 18:11:32 【问题描述】:

如何解决?

INSERT INTO logiciel VALUES ('log1','Oracle 6',13-05-1995,'6.2','UNIX','3000');
INSERT INTO logiciel VALUES ('log1','Oracle 6',13-05-1995,'6.2','UNIX','3000')
                                                    *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER

the error 这是桌子 the table

 create table logiciel (
    nLog varchar2 (5) primary key,
    nomLog varchar (20) not null,
    dateAchat date,
    version varchar2 (7),
    typeLog varchar2 (9),
    prix number (6,2)
    );

【问题讨论】:

Datetime literals 在 Oracle 手册中 13-05-1995 计算结果为 -1987。那是一个数字而不是一个日期。错误消息是不言自明的。 【参考方案1】:

使用带有适当格式掩码的日期文字或TO_DATE 函数。不要不要将字符串插入date 数据类型列,希望Oracle 会猜测您使用的格式。

SQL> -- date literal is always DATE 'yyyy-mm-dd'
SQL> INSERT INTO logiciel (nlog, nomlog, dateachat, version, typelog, prix)
  2    VALUES ('log1', 'Oracle 6', date '1995-05-13', '6.2', 'UNIX', '3000');

1 row created.

SQL> -- TO_DATE lets you choose format, but then the format mask must follow it
SQL> INSERT INTO logiciel (nlog, nomlog, dateachat, version, typelog, prix)
  2    VALUES ('log2', 'Oracle 6', to_date('13-05-1995', 'dd-mm-yyyy'), '6.2', 'UNIX', '3000');

1 row created.

SQL>

【讨论】:

【参考方案2】:

您必须在日期值周围使用引号,因为日期被视为字符串 -

INSERT INTO logiciel VALUES ('log1','Oracle 6','13-05-1995','6.2','UNIX','3000');

但只有使用字符串会告诉数据库将其存储为字符串而不是日期。它们之间的区别在于,您不能对字符串进行任何日期操作。所以你现在有两个选择。

    使用日期格式的 To_Date 函数 -
INSERT INTO logiciel VALUES ('log1','Oracle 6',TO_DATE('13-05-1995', 'DD-MM-YYYY'),'6.2','UNIX','3000');
    使用 ANSI 标准支持的 DATE 关键字,但您必须使用日期格式为 'YYYY-MM-DD'-
INSERT INTO logiciel VALUES ('log1','Oracle 6',DATE '1995-05-13','6.2','UNIX','3000');

【讨论】:

"但是只使用字符串会告诉数据库将其存储为字符串而不是日期。" 不,如果接收列定义为 DATE,那么它将存储它作为一个日期。时期。句号。如果您提供的只是一个字符串(一个字符串,它是一个日期的字符 representation),那么您将强制 oracle 执行一个隐含的 TO_DATE() 函数来获取所需的数据类型。只有当提供的字符串与 NLS_DATE_FORMAT 的控制设置所定义的格式相同时,这个隐含的 TO_DATE 才会起作用。

以上是关于Oracle中的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的数据类型

如何修改ORACLE中的数据类型

有啥方法能将oracle中CHAR类型数据中的空格去掉

postgresql数据类型test相当于oracle中的啥数据类型

Oracle中的基本数据类型

oracle中的TIMESTAMP 对应sqlserver2005中哪个数据类型