我必须在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
答案 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