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

How to pull part of a NVARCHAR field based on certain text?

我很抱歉这个糟糕的标题,我想不出更好的方式来表达它...

基本上,我有一个 NVARCHAR 字段,其中填充了各种生产评论,如下所示: (1/22/2015 (blujo) - WO113315 处理中)

我只想从该字段中拉出 'WO113315' 部分。这些是工单编号,在 table 的每一行中显然会有所不同。因此,对于其中某处包含 WO% 的任何字段,我想提取 WO% 加上它后面的 6 个字符。我不认为 trim 会起作用 b/c WO% 数字可能在该领域的任何地方。但它将始终以 WO% 开头。

您可以结合使用 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 代码,那么以下 case 语句可以提取它。在这一点上,我建议将这些结果保存到 table 上的一个新字段(或者可能是一个持久的计算列),这样您的服务器就不需要每次都经过这个。

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