Db2 如何在日期字段中添加2小时

Db2 如何在日期字段中添加2小时,db2,Db2,我正在使用DB2数据库,其中时间字段为以下字符串: 12104102000000 从左边看,它的意思是: > 1 --> is the century 21 --> is the year 04 --> is the month 10 --> are > the hours 20 --> are the minutes 00 --> are the seconds 000 --> are > the milliseconds 问题是这

我正在使用DB2数据库,其中时间字段为以下字符串:

12104102000000

从左边看,它的意思是:

> 1 --> is the century 21 --> is the year 04 --> is the month 10 --> are
> the hours 20 --> are the minutes 00 --> are the seconds 000 --> are
> the milliseconds
问题是这个字段和参考时间是同步的,所以意大利(我工作的地方)的时间是两个小时前的

我有一个查询,通常使用substr函数提取日期字段,起始部分是:

select substr("Message_Time",4,2) || '/' || substr("Message_Time",6,2)  || '/' || '20' || substr("Message_Time",2,2) as "Date",
       substr("Message_Time",8,2) || ':' || substr("Message_Time",10,2) as "Hour"
我只需要加上2个小时,把日期带到意大利。 但我认为这是一个日新月异的问题,因为如果我有,例如4月20日22:40,它会回复到意大利4月21日00:40


我应该怎么做才能使它工作?

请标记您使用的DB2

如果DB2LUW或DB2用于I,则可以使用

截止日期('12104102000000','yyymmddh24missf1')-100年+当前时区


我想它适用于DB2 for Z,但我不确定。

如果希望结果采用相同的字符串形式,请尝试以下方法:

SELECT
   SUBSTR (D, 1, 1)
|| SUBSTR 
  (
    TO_CHAR
    (
      TO_DATE(CAST(19 + SUBSTR(D, 1, 1) AS CHAR(2)) || SUBSTR(D, 2), 'YYYYMMDDHH24MISSFF3') + 2 HOURS
    , 'YYYYMMDDHH24MISSFF3'
    )
  , 3
  )
FROM (VALUES '12104102240000') T (D)

我的建议是放弃这一点,停止以这种方式存储日期。相反,使用正式的DB2日期列。如果你想让你当前的问题发挥作用,你会遇到各种各样难看的边缘案例。它由工作环境中监控产品的官方数据库组成。我不能改变这个。