我使用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'
它一直给我一个月值无效的错误。
答案 0 :(得分:2)
Oracle date
列始终包含日期和时间组件。拥有OrderDate
类型的Time
和date
两列是没有意义的。您的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小时制。