2017-04-10 151 views
0

您能否帮助我在下面的文本中的原因代码之后提取日期和文本?我可以使用patindex日期,但问题是我的日期可以DD/MM/YYYY或d/M/YYYYSQL Server字符串解析

项目推迟到2017年3月2日与原因代码:客户关系,客户将无法使用

项目重新计划到2/3/2017,原因码:天气恶劣

我没有创建函数的权限,它必须是SQL查询。

感谢, 阿努

回答

-1

在SQL,你不能提取存在于同一列作为信息数据。因此,如果信息退出同一列,则无法提取。因此,信息必须放在不同的表格中以便提取。

0

您可能应该为输入文本添加验证以包含'with'和'to'或过滤'invalid'条目。但是,这基本上是你问的:

declare @s varchar(255) 
set @s = 'Project rescheduled to 2/3/2017 with reason code : Weather Inclement' 

select RIGHT(LEFT(@s, CHARINDEX(' with', @s)-1), CHARINDEX(' with', @s) -CHARINDEX('to', @s) - 3) 
0
Declare @YourTable table (ID int,SomeCol varchar(500)) 
Insert Into @YourTable values 
(1,'Project rescheduled to 03/02/2017 with reason code : Customer Related-Customer Will Not Be Available'), 
(2,'Project rescheduled to 2/3/2017 with reason code : Weather Inclement') 

Select A.ID 
     ,Date = try_convert(date,right(B.dP,len(B.dp)-charindex(' ',B.dP)),103) 
     ,Reason = right(SomeCol,len(SomeCol)-charindex(':',SomeCol)-1) 
From @YourTable A 
Cross Apply (
       Select dP=substring(A.SomeCol,patindex('%/[0-9][0-9][0-9][0-9]%',A.SomeCol)-6,11) 
      ) B 

返回

ID Date  Reason 
1 2017-02-03 Customer Related-Customer Will Not Be Available 
2 2017-03-02 Weather Inclement