我几乎没有尝试连接时间戳。列时间(定义为varchar2)包含23:15之类的值。现在我想创建一个包含今天日期和时间的时间戳,在本例中为23.03.18 23:15:00.00000。我这样做的方式是
to_timestamp(to_char(trunc(current_date),'ddMMyyyy') ||
to_char(time),'dd.MM.yyyy hh24:mi:ss')
它有效。但是当场时间值为06:15时,我收到消息“小时必须在0到23之间”。无论我尝试什么,当时间值为零时,它始终是这个消息。怎么能纠正?
答案 0 :(得分:2)
您不需要在当前日期使用TRUNC
,因为TO_CHAR
只会提取年度组件而您也不需要{{1}在TO_CHAR
列上,因为它已经是一个字符串。除了这些简化之外,您的查询还可以:
Oracle 11g R2架构设置:
time
查询1 :
CREATE TABLE times ( time ) AS
SELECT '00:00' FROM DUAL UNION ALL
SELECT '06:45' FROM DUAL UNION ALL
SELECT '12:00' FROM DUAL UNION ALL
SELECT '18:59' FROM DUAL UNION ALL
SELECT '23:15' FROM DUAL;
<强> Results 强>:
SELECT time,
TO_TIMESTAMP(
TO_CHAR( CURRENT_DATE, 'YYYY-MM-DD' ) || time,
'YYYY-MM-DDHH24:MI'
) AS current_day_time
FROM times
答案 1 :(得分:0)
对我来说工作正常:
SQL> WITH test
2 AS (SELECT '23:15' time FROM DUAL
3 UNION
4 SELECT '06:15' time FROM DUAL)
5 SELECT TO_TIMESTAMP (
6 TO_CHAR (CURRENT_DATE, 'ddMMyyyy') || time,
7 'dd.MM.yyyy hh24:mi:ss') result
8 FROM test;
RESULT
----------------------------------------------------------------
23.03.18 06:15:00,000000000
23.03.18 23:15:00,000000000
SQL>
请发布您的SQL * Plus会话,以便我们可以看到您做了什么。
答案 2 :(得分:-1)
尝试其他方式:如果小时&lt;小时,则插入前导0 10
to_timestamp(to_char(trunc(current_date),'ddMMyyyy') ||
to_char(
case when substr(time,1,instr(time,':',1,1)-1)<10
then'0'||time
else time
end),'dd.MM.yyyy hh24:mi:ss')