DB2 - 如何从3个不同的字段创建TimeStamp

时间:2017-10-24 15:51:05

标签: db2

我必须在3个不同的字段中填写时间戳。

Refer_DT是一个包含Date的TimeStamp。 Refer_Time是包含时间的TimeStamp。 REFER_TIME_TYP_CD是一个整数字段,用于指定AM或PM。

我需要从所有三个字段构建一个时间戳。

先谢谢。

 Select REFER_ID, REFER_DT, REFER_TIME, REFER_TIME_TYP_CD, VarChar_Format(Refer_Time, 'AM') as Indicator, 
        Case When REFER_TIME_TYP_CD = 2858 
                  Then Case When VarChar_Format(REFER_TIME, 'AM') = 'AM' 
                                 Then TimeStamp(Date(REFER_DT), Time(REFER_TIME))
                                 Else TimeStamp(Date(REFER_DT), Time(REFER_TIME - 12 Hours)) 
                       End
             When REFER_TIME_TYP_CD = 2859 
                  Then Case When VarChar_Format(REFER_TIME, 'AM') = 'PM' 
                                 Then TimeStamp(Date(REFER_DT), Time(REFER_TIME))
                                 Else TimeStamp(Date(REFER_DT), Time(REFER_TIME + 12 Hours)) 
                       End
        End as "Intake Time"                                                         

From TREFERRAL  
Where REFER_ID = 32351883 
With UR

3 个答案:

答案 0 :(得分:0)

那么你的日期时间戳字段的日期是00:00:00.0000吗?

带时间的时间戳字段的日期时间为0001-01-01?

显然TS的时间只有0-12小时...

select                                              
  timestamp(date(Refer_DT)                          
            , case                                  
                when REFER_TIME_TYP_CD = 1          
                  then time(refer_time) + 12 hours  
                else                                
                   time(refer_time)                 
              end                                   
           )                                        
from mytable                                        

答案 1 :(得分:0)

您可以稍微简化一下查询:

Select REFER_ID, REFER_DT, REFER_TIME, REFER_TIME_TYP_CD, VarChar_Format(Refer_Time, 'AM') as Indicator, 
    Case When REFER_TIME_TYP_CD = 2858 And VarChar_Format(REFER_TIME, 'AM') = 'PM' 
              Then TimeStamp(Date(REFER_DT), Time(REFER_TIME - 12 Hours)) 
         When REFER_TIME_TYP_CD = 2859 And VarChar_Format(REFER_TIME, 'AM') = 'AM'
              Then TimeStamp(Date(REFER_DT), Time(REFER_TIME + 12 Hours))
              Else TimeStamp(Date(REFER_DT), Time(REFER_TIME)) 
    End as "Intake Time"                                                         

From TREFERRAL  
Where REFER_ID = 32351883 
With UR

但请注意,您丢失了之前的任何亚秒信息(有办法恢复此信息,但您没有指定是否需要它)。我也很好奇减去/增加12小时是否也应该减去/增加一天。

答案 2 :(得分:0)

如果你这样做:

select REFER_ID, REFER_DT, REFER_TIME, REFER_TIME_TYP_CD,                                         
TIMESTAMP(                                                     
VARCHAR_FORMAT(REFER_DT, 'YYYY-MM-DD-') ||                              
VARCHAR_FORMAT(REFER_TIME, case REFER_TIME_TYP_CD = 2859 then 'HH24' else 'HH12' end || '.MI.SS.NNNNNN')                                  
) "Intake Time" 
From TREFERRAL  
Where REFER_ID = 32351883 
With UR