Oracle对“DATE”值的期望是什么格式?

时间:2014-07-12 20:33:09

标签: sql oracle oracle-sqldeveloper

我使用Oracle的SQL模型开发人员中的关系模型来创建此表:

  CREATE TABLE Orders
  (
    OrderNum                   INTEGER NOT NULL ,
    OrderDate                  DATE ,
    TIME                       DATE ,
    Employee_EMP_CODE          VARCHAR2 (10) NOT NULL ,
    Tax_Id                     VARCHAR2 (10) ,
    Tax_Rate                   VARCHAR2 (10) ,
    Customers_Customer_No      INTEGER NOT NULL ,
    Consoles_Console_NO        VARCHAR2 (10) NOT NULL ,
    Customers_Buyer_First_Name VARCHAR2 (10) NOT NULL ,
    Customers_Buyer_Last_Name  VARCHAR2 (10) NOT NULL ,
    Comments                   VARCHAR2 (250)
  ) ;

由于某种原因,当我尝试插入行时,它不会占用时间值。我试过这些格式

  • '12:31:00'
  • '12.31.00'

它一直给我一个月值无效的错误。

3 个答案:

答案 0 :(得分:2)

Oracle date列始终包含日期和时间组件。拥有OrderDate类型的Timedate两列是没有意义的。您的OrderDate会有一个时间组件,而您的Time会有一天组件。实际上,您只需要一个date类型的列,其中包含下订单的日期和时间。

如果您尝试将数据插入date列,您可能希望从客户端应用程序传递正确的数据类型(即在创建您的客户端应用程序时绑定date insert语句)或者您希望使用to_date函数从字符串进行显式转换。例如

INSERT INTO Orders( OrderNum, OrderDate, <<more columns>> )
  VALUES( 1, to_date( '2014-07-12 12:31:00', 'YYYY-MM-DD HH24:MI:SS' ), <<more values>> );

答案 1 :(得分:0)

回答你的问题&#34; Oracle对DATE值的期望是什么格式?&#34;

您可以查看NLS_DATE_FORMAT:

  

SQL&GT;显示NLS_DATE_FORMAT

假设您正在使用默认值,它应该返回类似:DD-MON-RR

您实际上可以插入或选择没有To_Date,如下所示: 从OrderDate =&#39; 25-DEC-04&#39;;

的订单中选择*

回答你的真实问题:我应该如何存储我的订单日期:)

您似乎在两个单独的字段中存储订单日期和订单时间。 实际上没有必要这样做,因为这意味着您将为您的数据字段使用两倍的磁盘空间,您实际上只需要1个字段。

由于DATE数据类型将同时存储日期和时间,因此您实际上只需使用1个字段,这样在尝试选择数据时也会使生活变得更轻松。

您确实应该在订单发布时使用sysdate。 即:

SELECT TO_CHAR
    (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "OrderDate"
     FROM DUAL;

NOW
-------------------
04-13-2001 09:45:51

另请注意,我仅使用TO_CHAR进行打印。 插入时,您只需执行以下操作:

  

插入订单(OrderDate,其他字段)值(sysdate,其他字段);

我希望这会有所帮助。

答案 2 :(得分:0)

对于日期来说,Oracle非常烦人。不过,我对这种格式运气不错:

{ts 'yyyy-mm-dd HH:mi:ss'}

年,月,日,小时,分钟,秒。如果合适,使用前导零。每小时使用24小时制。