Sql Oracle希望'DATE'值采用什么格式?

Sql Oracle希望'DATE'值采用什么格式?,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我使用Oracle的SQL model developer中的关系模型创建此表: CREATE TABLE Orders ( OrderNum INTEGER NOT NULL , OrderDate DATE , TIME DATE , Employee_EMP_CODE VARCHAR2 (10) NOT NULL ,

我使用Oracle的SQL model developer中的关系模型创建此表:

  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'

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

Oracle
date
列始终包含日期和时间组件。将两列
OrderDate
Time
同时作为
date
类型是没有意义的。您的
OrderDate
将有一个时间组件,而
time
将有一个日期组件。实际上,您只需要一个类型为
date
的列,该列同时包含下订单的日期和时间

如果您试图将数据插入
日期
列,您可能希望从客户端应用程序传递正确的数据类型(即,在创建
插入
语句时,在客户端应用程序中绑定
日期
)或者,您可能希望使用
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>> );
插入订单(OrderNum,OrderDate,)
数值(1,截止日期('2014-07-12 12:31:00','YYYY-MM-DD HH24:MI:SS');
回答您的问题“Oracle希望日期值采用什么格式?”

您可以查看您的NLS\u日期\u格式:

SQL>显示NLS\u日期\u格式

假设您使用的是Default,那么它应该返回类似于:DD-MON-RR的内容

实际上,您可以插入或选择以下内容,而不选择截止日期: 从OrderDate='25-DEC-04'的订单中选择*

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

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

由于DATE数据类型将同时存储日期和时间,所以实际上您可以只使用1个字段,这将使您在尝试选择数据时更加轻松

您真的应该在下订单时考虑使用sysdate。 即:

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

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


我希望这能有所帮助。

甲骨文在涉及最新内容时非常烦人。但是,我很幸运地使用了这种格式:

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

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

您在
OrderDate
和/或
TIME
列中具体输入了什么?看起来你的意思是
TIME
属于
TIME
类型,而不是
DATE
我让关系建模师为我创建了DDL,这就是它给我的。我是否应该将时间列更改为时间而不是日期?在
时间
列中,您是否仅尝试存储时间(而不是日期的任何元素)?如果是,请参见它表示下订单的时间,因此与您的问题无关,但将
客户
订单
信息合并到同一个表中会违反规范化。有单独的
customer
orders
表,并将
orders
中的
CustomerNum
定义为
customers
表的外键,这将更有意义。感谢Justin,这是一个家庭作业,我们必须在其中开发和ERD然后是关系模型。我们必须根据摩托车店的三张发票来计算,但这就是我们所要做的。我想我会把它改成varchar2然后见鬼去吧。在这些董事会上,我认为现实世界中的人们不会像他教我们的那样做事。@user3786519-我强烈建议你不要使用
varchar2
列来存储
日期。使用实际日期列。正确,谢谢。我有一个日期类型的月份部分,这对于这个任务来说是重要的部分。老实说,他甚至从来没有告诉我们如何使用日期类型,所以我不确定他期望的是什么。@user3786519-这没有道理。正如我所说,日期总是有日期和时间。如果没有其他内容,就不能有“日期类型中的月份部分”。现在,您可以说您有一个
日期
,其中日期始终是一个月的第一天,时间部分始终是午夜。但是,将这些额外的数据存储在另一列中是没有意义的。
{ts 'yyyy-mm-dd HH:mi:ss'}