如何根据特定文本提取 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
我很抱歉这个糟糕的标题,我想不出更好的方式来表达它...
基本上,我有一个 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