我有一个表格,其中一列给出了24-JUL-17表格中的日期,另一列表示一个字符串告诉我hh:mm:ss.several_decimals表格中的小时但它们是24小时而不是AM / PM,有人能指出我如何在oracle中添加一个列,将它们组合成时间戳吗?
答案 0 :(得分:1)
CAST
将日期添加到时间戳数据类型,并使用TO_DSINTERVAL
将时间列转换为DAY TO SECOND INTERVAL
,然后将其添加到另一个:
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');