如何在oracle 10g中更改日期

时间:2017-04-23 12:40:56

标签: oracle

我必须在STIMING插入我使用TO_DATE函数的时间,但它给我的日期不是时间,应该是时间。

这是我使用的表格和代码

SQL> select * from shift;

       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

2 个答案:

答案 0 :(得分:1)

  

我必须加入STIMING时间

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

不能没有DATE的年,月或日组成部分。

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

当您SELECT STIMING列时,它未显示时间组件。您可以通过更改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' )

答案 1 :(得分:0)

我建议您避免更新,将插入部分从to_date更改为to_date( colname, 'DD-MON-YY HH24:MI:SS')