我有一个用户定义的函数,它接受一个消息(VARCHAR)作为参数,如果消息包含已定义的子字符串,则返回1;如果消息不包含,则返回0。此代码按预期工作:
--Create function to take one VARCHAR parameter and return one INTEGER
CREATE FUNCTION dbo.checkLetters (@MESSAGE VARCHAR(MAX))
RETURNS INTEGER
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
--Variable to store the 1 or 0
DECLARE @value INTEGER;
--Match
IF @MESSAGE LIKE '%lhl%'
SET @value = 1
--No Match
ELSE
SET @value = 0
RETURN @value
END;
我现在想要创建一个递归CTE,将此函数应用于包含大字符串的表中的特定列。但是我希望这个CTE显示总数为1,并且从整个表返回的总数为0。我该怎么做呢?
这就是我的想法:
我不想使用游标。
答案 0 :(得分:2)
如果我正确理解了您的问题,您希望计算与'%lhl%'
匹配的表中的行数,或者任何字符串模式。您可以使用简单的SELECT
语句执行此操作:
DECLARE @pattern VARCHAR(10) = '%lhl%'
SELECT
Successes = SUM(CASE WHEN [message] LIKE @pattern THEN 1 ELSE 0 END),
Fails = SUM(CASE WHEN [message] LIKE @pattern THEN 0 ELSE 1 END)
FROM your_table