从24小时内的字符串到时间戳

时间:2018-05-30 20:13:51

标签: oracle

我有一个表格,其中一列给出了24-JUL-17表格中的日期,另一列表示一个字符串告诉我hh:mm:ss.several_decimals表格中的小时但它们是24小时而不是AM / PM,有人能指出我如何在oracle中添加一个列,将它们组合成时间戳吗?

3 个答案:

答案 0 :(得分:1)

CAST将日期添加到时间戳数据类型,并使用TO_DSINTERVAL将时间列转换为DAY TO SECOND INTERVAL,然后将其添加到另一个:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE table_name (
  date_column DATE,
  time_column VARCHAR2(15)
);

INSERT INTO table_name ( date_column, time_column ) 
  VALUES ( DATE '2017-06-24', '12:34:56.789012' );

查询1

SELECT CAST( date_column AS TIMESTAMP )
       + TO_DSINTERVAL( '+0 ' || time_column ) AS datetime
FROM   table_name

<强> Results

|                   DATETIME |
|----------------------------|
| 2017-06-24 12:34:56.789012 |

答案 1 :(得分:0)

这是一个制作表的例子。

WITH test_data AS (
    SELECT
        SYSDATE date_val,
        '14:23:15.123' AS time_val
    FROM
        dual
) SELECT
    to_timestamp(TO_CHAR(date_val,'MM/DD/YYYY')
                   || ' '
                   || time_val,'MM/DD/YYYY HH24:MI:SS.FF3')
  FROM
    test_data

答案 2 :(得分:0)

只需将两个输入字符串与||连接起来,然后将其转换为TO_TIMESTAMP即可。格式有点棘手,花了我一段时间才弄清楚。

CREATE TABLE mytable (mydate VARCHAR2(9), mytime VARCHAR2(20), mytimestamp TIMESTAMP);
INSERT INTO mytable (mydate, mytime) VALUES ('24-JUL-17', '22:56:47.1915010');

测试

SELECT TO_TIMESTAMP(mydate||mytime, 'DD-MON-YYHH24:MI:SS.FF9') FROM mytable; 
2017-07-24 22:56:47,191501000

或者,在表格中:

UPDATE mytable 
   SET mytimestamp = TO_TIMESTAMP(mydate||mytime, 'DD-MON-YYHH24:MI:SS.FF9');