【问题标题】:how to change the date to time in oracle 10goracle 10g中如何修改日期时间
【发布时间】:2017-04-23 12:40:56
【问题描述】:

我必须在插入时输入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

【问题讨论】:

  • 添加到问题表描述中,以便人们回答你。
  • 您必须为 DATE data type 提供 DATE 组件。选择任意日期,例如 2000-01-01,并将所有值存储为 2000-01-01 的时间,例如 TO_DATE('2000-01-01 07:00:00', 'YYYY-MM-DD HH24:MI:SS')

标签: oracle


【解决方案1】:

我必须输入一次STIMING

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

不能DATE 中没有年、月或日部分。

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

当您SELECTing 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' )

【讨论】:

    【解决方案2】:

    我建议你避免更新,将插入部分从没有格式参数的 to_date 更改为 to_date( colname, 'DD-MON-YY HH24:MI:SS')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2011-09-20
      • 2023-04-11
      • 2013-02-05
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多