使用SQL SERVER QUERY查找字符串中所有出现的模式

时间:2019-03-18 13:36:06

标签: sql-server

我想使用SQL Server查询过滤字符串中所有出现的模式。例如:“#Hello world!需要#filter #tag”在此字符串中需要过滤#标签词... 结果应该是... “#你好” “#过滤” “ #tag”

4 个答案:

答案 0 :(得分:0)

随着问题上显示的信息的出现,您可能是指这样的东西:

SELECT * FROM table_A WHERE column_A LIKE '#%'

此查询将为您提供表table_A中带有主题标签符号的column_A列中的所有字段

答案 1 :(得分:0)

使用字符串拆分器非常简单。我正在使用Jeff Moden的分离器,您可以找到here

postgresql+psycopg2://127.0.0.1:5432/airflow

答案 2 :(得分:0)

请确认是否适合您

declare @tempTable table (hashtag varchar(Max))
declare @asdf varchar(100) = '#Hello world! Need to #filter the #tag'
declare @i integer =0
declare @length integer = (select len(@asdf)-len(replace(@asdf,'#','')))

while (select @i)< @length
begin
    insert into @tempTable select substring(@asdf,charindex('#', @asdf),charindex(' ', @asdf))
    set @asdf = ltrim((select substring(substring(@asdf,charindex('#', @asdf),len(@asdf)),charindex(' ', @asdf)+1,len(@asdf))))
    set @i = @i+1
end

select HashTag from @tempTable

答案 3 :(得分:0)

如果Sean Lange是正确的,并且应该避免循环,那么下面的另一个答案也可以不循环:

declare @asdf varchar(100) = '#Hello world! Need to #filter the #tag'

SELECT 
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS HashTag
FROM
(
SELECT CAST('<Records><Row>' + REPLACE(@asdf,' ','</Row><Row>') + '</Row></Records>' AS XML) AS x
)t
CROSS APPLY x.nodes('/Records/Row')m(n)
where LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)')))  like '#%'

然后,您可以将上述逻辑合并到可应用于每一行的标准SELECT语句上。