我正在查询包含评论部分的表格。注释部分可以包含可变长度的部件号。如果在评论部分中我确保部件号用引号括起来(“partnumberA”),是否可以查询该字段以引用引号之间的所有内容(即使部件号的长度可能不同)?
生产注释存储在NVARCHAR字段中。以下是一些示例数据:
2015年3月6日(蓝调) - “3490-0001023-02”PO46709到期3/10(RW24718)
答案 0 :(得分:3)
您可以结合使用substring
和charindex
个功能。
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个字符),您可以随时尝试SUBSTRING
,CHARINDEX
混合:
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
)