【问题标题】:Oracle - convert char to dateOracle - 将字符转换为日期
【发布时间】:2015-08-22 04:58:41
【问题描述】:

我尝试将旧时间 char(8) 列转换为新的 time_conv 日期列。

String 列的格式如下:

时 (0-99):分 (0-59):秒 (0:59)

例如:01:32:56

以下代码对我不起作用:

update teldat set time_conv=to_date(time,'hh24:mi:ss');

编辑:

CREATE TABLE teldat(
    datum       DATE,
    uhrzeit     CHAR(8),
    time        CHAR(8),
    teilnehmer  NUMBER(3),
    verbart     NUMBER(1),
    aufbauart   CHAR(3),
    ziel        VARCHAR(15));

alter table teldat add (time_conv date);

INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'17:33 ', '00:00:40',10,9, 'K10', NULL); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'18:50 ', '00:01:41',13,9, 'K10', NULL); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'19:10 ', '00:02:17',21,1, 'G1 ', '01019012896****'); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'19:31 ', '00:11:01',10,9, 'K10', NULL); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'19:52 ', '00:09:47',20,1, 'G11', '077202****'); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'19:49 ', '10:07:02',21,1, 'G1 ', '01019012896****'); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'19:58 ', '00:02:41',21,1, 'G1 ', '01019012896****'); 
INSERT INTO TELDAT VALUES (to_date('04.08.2011'),'20:01 ', '00:02:31',21,1, 'G1 ', '01019012896****'); 
INSERT INTO TELDAT VALUES (to_date('05.08.2011'),'09:03 ', '00:03:02',11,9, 'K10', NULL); 
INSERT INTO TELDAT VALUES (to_date('05.08.2011'),'09:13 ', '00:03:31',10,1, 'G10', '071174****'); 
INSERT INTO TELDAT VALUES (to_date('05.08.2011'),'09:39 ', '00:06:45',13,1, 'G10', '0711707*****'); 

【问题讨论】:

  • 你能详细说明“不适合我”吗?你有错误吗?结果错误?
  • 没有错误信息,我的命令有问题... time_conv 列中的输出结果是日期 01.06.15 的每一行
  • 您能分享一下您的表格定义和一些示例数据吗?
  • 在主线程中添加示例代码
  • 更新语句很好,只是date 不是存储时间(仅)数据的最佳类型。如果您以正确的格式查询此列,您会看到它保存了所需的数据 - sqlfiddle.com/#!4/880ff/2

标签: sql oracle date type-conversion


【解决方案1】:

这段代码对我有用:)

  update teldat set time_conv=(to_number(substr(time, 1, 2)) * 60 * 60 +
        to_number(substr(time, 4, 2)) * 60 +
        to_number(substr(time, 7, 2))
       );

谢谢大家!

【讨论】:

    【解决方案2】:

    如果要将值转换为秒,则只需使用算术:

    select (to_number(substr(time, 1, 2)) * 60 * 60 +
            to_number(substr(time, 4, 2)) * 60 +
            to_number(substr(time, 7, 2))
           ) as seconds
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2015-04-25
      • 2011-12-16
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多