SQL Server:Like中的正则表达式

时间:2014-05-29 20:57:08

标签: sql sql-server regex sql-like

我无法在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])%'

2 个答案:

答案 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 + '%'

在选择数据时需要应用通配符,而不是在存储数据时应用。