想要从评论部分提取变量信息

时间:2015-03-06 20:35:23

标签: sql sql-server sql-server-2008

我正在查询包含评论部分的表格。注释部分可以包含可变长度的部件号。如果在评论部分中我确保部件号用引号括起来(“partnumberA”),是否可以查询该字段以引用引号之间的所有内容(即使部件号的长度可能不同)?

生产注释存储在NVARCHAR字段中。以下是一些示例数据:

2015年3月6日(蓝调) - “3490-0001023-02”PO4670​​9到期3/10(RW24718)

4 个答案:

答案 0 :(得分:3)

您可以结合使用substringcharindex个功能。

declare @Comments varchar(50)
set @Comments = '3/6/2015 (blujo) - "3490-0001023-02" PO46709 Due 3/10 (RW24718)'
select substring(@Comments,
                charindex('"',@Comments)+1,
                charindex('"',@Comments,
                    charindex('"',@Comments)+1)-charindex('"',@Comments)-1)

第一个charindex找到第一个引号并从下一个字符开始。第二个和第三个charindex在第一个之后找到下一个引号。

答案 1 :(得分:0)

如果部件号的长度是标准长度(例如6个字符),您可以随时尝试SUBSTRINGCHARINDEX混合:

SELECT SUBSTRING(Comments, CHARINDEX('"', Comments) - 1, CHARINDEX('"', Comments) + 6)
FROM Table

这会在第一个双引号之前启动你的子字符串,直到它找到最后一个双引号。

答案 2 :(得分:0)

您可以使用CROSS APPLY选择"字段中NVARCHAR字符连续出现的索引。有了这些索引,您可以使用SUBSTRING来提取字段的必需部分:

SELECT SUBSTRING(ProductionNotes, First.x + 1, Second.x - First.x - 1) 
FROM MyTable
CROSS APPLY (SELECT CHARINDEX('"', ProductionNotes)) AS First(x)
CROSS APPLY (SELECT CHARINDEX('"', ProductionNotes, First.x + 1)) AS Second(x)

First.x"字段中ProductionNotes第一次出现的索引。通过将先前的索引+ 1(即First.x + 1)作为start_location的{​​{1}}来提供第二次出现。

答案 3 :(得分:0)

这是使用变量的示例。当然,您的查询将引用表列:

declare @x varchar(256) = '3/6/2015 (blujo) - "3490-0001023-02" PO46709 Due 3/10 (RW24718)';
select
    substring(
        @x,
        charindex('"', @x) + 1, 
        charindex('"', @x, charindex('"', @x) + 1) - charindex('"', @x) - 1
   )