String tsql无法将字符串转换为日期时间

String tsql无法将字符串转换为日期时间,string,tsql,datetime,String,Tsql,Datetime,当我从文本字段构造datetime时,我得到一个错误。 “服务器:Msg 241,16级,状态1,第1行 从字符串转换日期时间时出现语法错误。“ 我使用的文本是 “航班警报:亲爱的客户,2014年3月28日283次航班延误,新ETD为3月29日05时30分。” 这是我的问题 SELECT --- Extracting Flight No from Message field -- case when substring(oh_message,(charindex('/',OH_MES

当我从文本字段构造datetime时,我得到一个错误。 “服务器:Msg 241,16级,状态1,第1行 从字符串转换日期时间时出现语法错误。“ 我使用的文本是 “航班警报:亲爱的客户,2014年3月28日283次航班延误,新ETD为3月29日05时30分。”

这是我的问题

    SELECT 
--- Extracting Flight No from Message field --
case
 when substring(oh_message,(charindex('/',OH_MESSAGE)-4),1) = '-' 
   or substring(oh_message,(charindex('/',OH_MESSAGE)-4),1) = 'K'
 THEN
   substring(oh_message,(charindex('/',OH_MESSAGE)-3),3)
 else
   substring(oh_message,(charindex('/',OH_MESSAGE)-4),4)
END AS flightno,
---- next Flight Date
substring(oh_message,(CHARINDEX('/',Oh_message)) + 1
,5)as DtMnth,

---- next Flight Year
substring(oh_message,(CHARINDEX('/',Oh_message)) + 7
,4)as DtYr,
-- Flight Hours
case
when source = 'SNMv2' THEN(
substring(oh_message,(CHARINDEX('is on time at',Oh_message)) + 14,4))
else
substring(oh_message,(CHARINDEX('new ETD is',Oh_message)) + 11,4)
end as fhour,

--- Converting to datetime format
CONVERT(datetime,
 (substring(oh_message,(CHARINDEX('/',Oh_message)) + 3,3))
  + ' ' + 
 (substring(oh_message,(CHARINDEX('/',Oh_message)) + 1,2)) 
 + ' ' + 
 (substring(oh_message,(CHARINDEX('/',Oh_message)) + 7,4))
,109)

,OH_MESSAGE


 from snmnsnmv2view    

分别选择不同的部分以确保您正在组合的数据是正确的,例如,您是否确定此部分中的数据是正确的
substring(oh_message,(CHARINDEX('/',oh_message))+3,3)
我尝试了此方法,并且效果良好:
declare@oh_message varchar(max)set@oh_message='航班警报:亲爱的客户,283/283航班,2014年延迟,新ETD为3月29日05:30选择转换(日期时间,(子字符串(@oh_消息,(CHARINDEX('/',@oh_消息))+3,3))+“”+(子字符串(@oh_消息,(CHARINDEX('/',@oh_消息))+1,2))+“”+(子字符串(@oh_消息,(CHARINDEX('/',@oh_消息))+7,4)),109)因为OH_消息
得到了2014-03-28 00:00:00.000作为输出。我刚刚发现由于格式不同,文本字段中有一些额外字符。无论如何,感谢RezaRahmati和KingTwisp。