来自current_date的oracle concat timestmap

时间:2018-03-23 11:07:17

标签: oracle timestamp

我几乎没有尝试连接时间戳。列时间(定义为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之间”。无论我尝试什么,当时间值为零时,它始终是这个消息。怎么能纠正?

3 个答案:

答案 0 :(得分:2)

您不需要在当前日期使用TRUNC,因为TO_CHAR只会提取年度组件而您也不需要{{1}在TO_CHAR列上,因为它已经是一个字符串。除了这些简化之外,您的查询还可以:

SQL Fiddle

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')