转换为时间格式

时间:2014-10-20 09:05:09

标签: sql-server time

有一个查询,我收到此错误:

从字符串转换日期和/或时间时转换失败。 这是查询:

Select cast(RESULT_APPROVE_FULL_DATE as date) as RESULT_APPROVE_FULL_DATE, dtvl18, cast(RESULT_APPROVE_FULL_DATE as time) as RESULT_APPROVE_FULL_DATE_2, tdvl18
from #a1
left join #b1
on ADNR18=PATIENT_ID
and INST18=isuf_lab
and STNR18=request_number
and cast(RESULT_APPROVE_FULL_DATE as date)= cast(cast(dtvl18 as varchar) as date)
and cast(RESULT_APPROVE_FULL_DATE as time)=cast(cast(tdvl18 as varchar) as time)

问题肯定在于最后一个子句,因为当我删除它时,一切正常)但我需要那个)。即,问题在于将tdvl18(十进制(4,0),null)转换为时间格式。 可以推断,tdvl18字段看起来像这样,例如:947,1525,2359等。如何将这些十进制值转换为时间格式(hh:mm:ss.nnnnnnn)?

谢谢!

1 个答案:

答案 0 :(得分:1)

失败是因为SQL Server无法将字符串值识别为有效时间。因此,您可以通过以下方式重现您当前的错误:

declare @someval as varchar(10) = '525'    
select cast(@someval as time)

-- Conversion failed when converting date and/or time from character string.

如果您使用 STUFF 方法在正确的位置(最后2位数之前)使用:格式化值,则转换应适用于您的值:

declare @someval as varchar(10) = '525'
select cast(stuff(@someval, len(@someval) - 1,0, ':') as time)

-- 05:25:00.0000000

这似乎也直接对小数值起作用,因此您可以先避免转换为varchar

declare @someval as decimal(4,0) = 525   
select cast(stuff(@someval, len(@someval) - 1,0, ':') as time)

-- 05:25:00.0000000

将最后一个子句更改为此可能会有效,假设RESULT_APPROVE_FULL_DATE正在正确地转换为时间值:

and cast(RESULT_APPROVE_FULL_DATE as time) 
   = cast(stuff(tdvl18, len(tdvl18) - 1,0, ':') as time)