【问题标题】:create table with time datatype and insertion time data in table在表中创建具有时间数据类型和插入时间数据的表
【发布时间】:2015-02-19 02:22:55
【问题描述】:

我想在表格中插入时间数据。那么,我应该使用什么类型的数据类型以及如何在表中插入时间?我在创建表语句中使用了“时间戳”,但是当我在表中插入时间时,它显示错误(错误代码:ORA-01861)。请帮我。我使用 ORACLE 11g。

DDL 语句:

 CREATE TABLE "SOM"."FLIGHTS" 
   (    "FLNO" NUMBER(3,0) NOT NULL ENABLE, 
    "FROM" VARCHAR2(20 BYTE), 
    "TO" VARCHAR2(20 BYTE), 
    "DISTANCE" NUMBER(5,3), 
    "DEPARTS" TIMESTAMP (3), 
    "ARRIVES" TIMESTAMP (3), 
    "PRICE" NUMBER(5,2), 
     CONSTRAINT "FLIGHTS_PK" PRIMARY KEY ("FLNO")   );

插入语句:

insert into flights 
values (1, 'Bbsr', 'Calcutta', 600, timestamp '05:30', timestamp '06:50', 8000);

【问题讨论】:

    标签: sql oracle timestamp type-conversion


    【解决方案1】:

    ORA-01861 的消息是literal does not match format string。此错误意味着我们将字符串转换为另一种数据类型,但字符串的格式错误。

    您的插入语句使用 ANSI SQL 样式 timestamp() 函数将两个字符串转换为 TIMESTAMP 数据类型。此函数采用规定格式:YYYY-MM-DD HH24.MI.SSYYYY-MM-DD HH24.MI.SS.FFYYYY-MM-DD HH24.MI.SS.FF TZ

    您收到 ORA-01861 是因为您的字符串与以下格式之一不匹配:timestamp '05:30'

    在这种情况下,解决方案是更改列数据类型:您不需要时间戳,即特定日期的特定时间。您想要的只是航班的起飞和降落时间,最好将其表示为number(4,2)varchar2(5),这是一个检查约束。


    另外两个观察结果。

    您的插入语句的数值对于指定的数字列来说太大了,这很容易修复。

    您的表定义使用 oracle 保留字作为列名,即 TO 和 FROM。 create 语句之所以成功,只是因为您将所有内容都用双引号括起来,因此 Oracle 不会验证名称。像这样使用保留字是非常糟糕的做法。每次我们引用列时,我们都需要编写...

      select  flno, "FROM", "TO" from flights;
    

    ...否则我们将得到 ORA-00936 (SQLFiddle demo)。那些不得不使用你的桌子并维护你的代码的可怜虫会永远诅咒你。不要成为那个人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 2021-09-06
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多