在T-SQL中检索字符串中的多个单词

时间:2017-04-11 19:19:28

标签: sql sql-server tsql

我有一个类似'(ST1)的字符串今天是星期二,(ST2) - CCC,yao(ST3)'。我想检索所有以ST开头然后插入的单词临时表。在这种情况下,临时表将有3行,包括ST1,ST2和ST3。有没有什么好方法可以实现这个目标?谢谢。我使用的是SQL Server 2008,T-SQL是我的语言。

2 个答案:

答案 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