2017-04-23 67 views
0

我必须在STIMING的时候插入我使用TO_DATE函数,但它给了我日期而不是时间,它应该是时间。如何更改oracle中的日期和时间10g

这是表和,我使用的代码

SQL> SELECT * FROM移;

 SNO SNAME    STIMING 
---------- -------------------- --------- 
    121323 morning    01-APR-17 
    112232 evening    01-APR-17 
    665342 afternoon   01-APR-17 

SQL> update shift 
2 set STIMING= ('07:00:00 HH,MI,SS') 
3 where SNO=121323; 
set STIMING= ('07:00:00 HH,MI,SS')    
* 
ERROR at line 2: 
ORA-01843: not a valid month 
+0

加入问题表说明,让人们可以回答你。 – Seyran

+0

您必须为'DATE' [数据类型](https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT413)提供DATE组件。选择一个任意日期,例如2000-01-01,并将所有值存储为2000-01-01的时间,例如'TO_DATE('2000-01-01 07:00:00','YYYY-MM-DD HH24: MI:SS')'。 – Serge

回答

1

我已经把在STIMING时间

Oracle没有一个TIME数据类型。数据类型始终在内部存储为7-bytes,并且始终由年(2字节)和月,日,小时,分钟和秒(每个1字节)组成。

不能没有DATE的年,月或日组件。

如果您想自己创建一个时间,那么您将不得不将其存储为不同的数据类型或存储年/月/日并忽略该组件。

当你是SELECTSTIMING列它没有显示时间组件。您可以通过更改NLS_DATE_FORMAT会话参数中设置的默认日期格式来更改此设置。

您可以通过查看该参数:

SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT'; 

您可以使用当前会话中设置这个值:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 

(注:这不会对任何其他用户更改值)

当您插入日期时,您可以使用:

INSERT INTO shift (SNO, SNAME, STIMING) 
VALUES (121323, 'morning', TO_DATE('01-APR-2017 07:00' DD-MON-YYYY HH24:MI')) 

或者,一个ANSI TIMESTAMP文字(将隐式转换为DATE格式塔):

INSERT INTO shift (SNO, SNAME, STIMING) 
VALUES (121323, 'morning', TIMESTAMP '2017-04-01 07:00:00') 
+0

其工作非常感谢 – narjis

0

我建议你避免更新,从to_date无格式PARAM改变你的嵌件到to_date(colname, 'DD-MON-YY HH24:MI:SS')