【发布时间】:2012-07-28 22:42:38
【问题描述】:
是否可以在 T-SQL 中编写 LIKE 条件来匹配包含通配符到字符串的逗号分隔列表。让我用一个例子进一步解释:
假设您在字段中有以下命令分隔的 url 列表:
'/, /news/%, /about/'
现在这里有一些我想与上面的字符串匹配的字符串示例:
- '/'
- '/新闻/'
- '/news/2/'
- '/关于/'
还有一些不匹配的字符串:
- '/contact/'
- '/about/me/'
我在过去通过编写一个拆分函数然后对每个函数都执行类似操作来实现这一点。但是我试图让我的查询在不支持函数的 SQL Server CE 中工作。
如果你想知道我是如何使用 split 函数实现它的:
SELECT Widgets.Id
FROM Widgets
WHERE (SELECT COUNT(*) FROM [dbo].[Split](Urls, ',') WHERE @Input LIKE Data) > 0
这里是拆分函数:
CREATE FUNCTION [dbo].[Split]
(
@RowData NVARCHAR(MAX),
@Separator NVARCHAR(MAX)
)
RETURNS @RtnValue TABLE
(
[Id] INT IDENTITY(1,1),
[Data] NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @Iterator INT
SET @Iterator = 1
DECLARE @FoundIndex INT
SET @FoundIndex = CHARINDEX(@Separator, @RowData)
WHILE (@FoundIndex > 0)
BEGIN
INSERT INTO @RtnValue ([Data])
SELECT Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))
SET @RowData = SUBSTRING(@RowData, @FoundIndex + DATALENGTH(@Separator) / 2, LEN(@RowData))
SET @Iterator = @Iterator + 1
SET @FoundIndex = CHARINDEX(@Separator, @RowData)
END
INSERT INTO @RtnValue ([Data])
SELECT Data = LTRIM(RTRIM(@RowData))
RETURN
END
如果有人可以提供帮助,我将不胜感激。谢谢
【问题讨论】:
-
您的问题的答案是“否”。您可能会调查正则表达式。或者,如果您将“逗号分隔列表”保留为单独的表格,每行一个项目,那么您可以将 like 用于连接。
标签: sql tsql sql-server-ce