我有一个类似'(ST1)的字符串今天是星期二,(ST2) - CCC,yao(ST3)'。我想检索所有以ST开头然后插入的单词临时表。在这种情况下,临时表将有3行,包括ST1,ST2和ST3。有没有什么好方法可以实现这个目标?谢谢。我使用的是SQL Server 2008,T-SQL是我的语言。
答案 0 :(得分:1)
假设每个"字"是你在括号之间你可以很容易地使用字符串拆分器。我在sql server central.com上使用Jeff Moden的分离器。您可以在此处找到文章,讨论和代码。 http://www.sqlservercentral.com/articles/Tally+Table/72993/
还有很多其他伟大的分裂者。 Aaron Bertrand在这里有一篇很棒的文章和收藏。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings
declare @SomeString varchar(100) = '(ST1) today is Tuesday,(ST2)--CCC,yao (ST3)'
select s.Item
from dbo.DelimitedSplit8K(replace(@SomeString, ')', '('), '(') s
where Item like 'ST%'
答案 1 :(得分:1)
您也可以抓取NGrams8K的副本并执行此操作:
DECLARE @yourstring varchar(100) = '(ST1) today is Tuesday,(ST2)--CCC,yao (ST3)';
SELECT item = SUBSTRING(token, 2, 3)
FROM dbo.NGrams8k(@yourstring, 5)
WHERE token LIKE '(%)';
编辑:如何处理超过3的值:
DECLARE @yourstring varchar(100) = '(ST1) today is Tuesday,(ST2)--CCC,yao (ST11)!! (ST999)';
WITH gramSizes(s,ng) AS (SELECT 3, 5 UNION ALL SELECT 4, 6 UNION ALL SELECT 5, 7)
SELECT item = SUBSTRING(token, 2, s)
FROM gramSizes
CROSS APPLY dbo.NGrams8k(@yourstring, ng)
WHERE token LIKE '(%)'AND token NOT LIKE '%) '
结果:
item
-----
ST1
ST2
ST11
ST999