如何根据特定文本提取部分NVARCHAR字段?

时间:2015-02-11 15:28:29

标签: sql-server-2008

对不起这个可怕的头衔,我想不出一个更好的方式陈述它......

基本上,我有一个NVARCHAR字段,其中填充了各种生产注释,如下所示: (2015年1月22日(blujo) - WO113315 In Process)

我想从该字段中删除'WO113315'部分。这些是工单号,在表的每一行中显然会有所不同。因此,对于任何包含WO%的字段,我希望将WO%加上后面的6个字符。我不认为修剪会起作用b / c WO%数字可能在该领域的任何地方。但它总是从WO%开始。

1 个答案:

答案 0 :(得分:2)

您可以使用SUBSTRING和CHARINDEX的组合。

DECLARE @VAL AS NVARCHAR(100) = '1/22/2015 (blujo) - WO113315 In Process'
SELECT SUBSTRING(@VAL, CHARINDEX('WO', @VAL), 8)

如果您知道工单号码将始终显示在短划线后面,您还可以使用以下内容确保此时开始搜索。

DECLARE @VAL AS NVARCHAR(100) = '1/22/2015 (WOblujo) - WWO113315 In Process'
SELECT SUBSTRING(@VAL, CHARINDEX('WO', @VAL, CHARINDEX('-',@VAL)), 8)

编辑:如果您不能保证WO代码,那么以下案例陈述可以提取它。此时,我建议将这些结果保存到表中的新字段(或者可能是持久计算列),这样您的服务器每次都不需要经历这一点。

DECLARE @VAL AS NVARCHAR(100) = '1/22/2015 (blujo) - RW13315 In Process'
SELECT CASE WHEN CHARINDEX('WO', @VAL, CHARINDEX('-',@VAL)) > 0 THEN
    SUBSTRING(@VAL, CHARINDEX('WO', @VAL, CHARINDEX('-',@VAL)), 8)
WHEN CHARINDEX('RW', @VAL, CHARINDEX('-',@VAL)) > 0 THEN
    SUBSTRING(@VAL, CHARINDEX('RW', @VAL, CHARINDEX('-',@VAL)), 8)
ELSE NULL END