我想使用SQL Server查询过滤字符串中所有出现的模式。例如:“#Hello world!需要#filter #tag”在此字符串中需要过滤#标签词... 结果应该是... “#你好” “#过滤” “ #tag”
答案 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语句上。