我无法在SQL Server中使用正则表达式。
我接受逗号分隔列表,每个项目都是我想要匹配的字符串。
DECLARE @List TABLE ([SearchText] VARCHAR(255))
INSERT INTO @List ([SearchText])
SELECT CAST(Item AS VARCHAR)
FROM dbo.fnSplit(@IDs, ',')
UPDATE @List SET SearchText = '%controller/action/' + SearchText + '%'
然后我需要找出这个匹配是否在某些表中。
SELECT ID FROM table1 t1
INNER JOIN @List L ON t1.[Url] LIKE L.SearchText
问题是这会匹配'controller / action / 283'和'controller / action / 2834'
所以我尝试了'%controller/action/' + SearchText + '[^0-9]%'
这几乎可行。它适用于'controller / action / 2834'但它与'controller / action / 283'不匹配,因为它之后什么也没有。我目前遇到的问题是正常的正则表达似乎不能在这种语法中工作,因为我不能只做'(\b|[^0-9])%'
答案 0 :(得分:1)
指定两种可能性,并按' OR':
组合UPDATE @List SET SearchText = '%controller/action/' + SearchText
SELECT ID FROM table1 t1
INNER JOIN @List L ON t1.[Url] LIKE L.SearchText
OR t1.[Url] LIKE L.SearchText + '[^0-9]%'
答案 1 :(得分:0)
删除更新中的通配符:
UPDATE @List SET SearchText = 'controller/action/' + SearchText
将选择更改为:
SELECT ID FROM table1 t1
INNER JOIN @List L ON t1.[Url] LIKE '%' + L.SearchText + '%'
在选择数据时需要应用通配符,而不是在存储数据时应用。