Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 转换为时间格式_Sql Server_Time - Fatal编程技术网

Sql server 转换为时间格式

Sql server 转换为时间格式,sql-server,time,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

在一个查询中,我得到了以下错误:

从字符串转换日期和/或时间时,转换失败。 问题是:

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.nnn)


谢谢

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

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

-- Conversion failed when converting date and/or time from character string.
如果使用方法在正确位置(最后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\u APPROVE\u FULL\u DATE
正确地转换为时间值:

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

请添加一些示例数据和所需的输出,因为很难理解如何将
94715252359
格式化为时间值。94715252359是示例数据。所需格式-09:47:00.0000000、15:25:00.0000000等。是否可能?非常感谢@燕-我希望解决了你的问题。如果是,您可以通过将社区标记为已接受(单击大复选标记)来帮助社区✓ 答案的左边)。接受的答案有助于未来的访问者自信地使用解决方案。@Yan没问题,如果这解决了您的问题,您可以使用“向上/向下投票”按钮旁边的勾号将其标记为答案。