我正在使用SQL Server 2008,我有以下问题。
我有这样一张桌子:
每列代表一年,目的是知道在任何列中是否有重复的字符定义的次数(要查找的字符和出现的次数是参数)。
问题是,如何知道是否存在n次出现字符参数的列?
例如,只知道在某个记录中,在任何列中,字符“2”是否重复3次
您执行的示例:我搜索字符“1”是否在ANIO_1列中重复了6次
Declare @charToFind varchar(3) = '1'
Declare @Ocurrences int = 6, @result INT
SELECT @result =
COUNT(COALESCE(LEN(ANIO_1) - LEN(REPLACE(ANIO_1,@charToFind,'')),
LEN(ANIO_1), 0))
FROM
#MATRIZ_HISTORICO_PAGOS
WHERE
COALESCE(LEN(ANIO_1) - LEN(REPLACE(ANIO_1,@charToFind,'')), LEN(ANIO_1), 0) = @Ocurrences
SELECT CASE WHEN @result > 0 THEN 'OK' ELSE 'NO MATCH' END
但我的问题的目的是如何知道数字1是否在表的任何列中重复6次
感谢您的帮助,对不起我的英语
我创建了一个样本。请参阅http://sqlfiddle.com/#!6/67d2a/1
DECLARE @OccuranceChars INT
DECLARE @FindSubString VARCHAR(5)
SET @FindSubString = '2'
SET @OccuranceChars = 3
SELECT ANIO_1,
(LEN(ANIO_1) - LEN(REPLACE(ANIO_1, @FindSubString, '')))/LEN(@FindSubString) as Occurance_ANIO_1,
ANIO_2,
(LEN(ANIO_2) - LEN(REPLACE(ANIO_2, @FindSubString, '')))/LEN(@FindSubString) as Occurance_ANIO_2,
ANIO_3,
(LEN(ANIO_3) - LEN(REPLACE(ANIO_3, @FindSubString, '')))/LEN(@FindSubString) as Occurance_ANIO_3,
ANIO_4,
(LEN(ANIO_4) - LEN(REPLACE(ANIO_4, @FindSubString, '')))/LEN(@FindSubString) as Occurance_ANIO_4,
ANIO_5,
(LEN(ANIO_5) - LEN(REPLACE(ANIO_5, @FindSubString, '')))/LEN(@FindSubString) as Occurance_ANIO_5,
ANIO_6,
(LEN(ANIO_6) - LEN(REPLACE(ANIO_6, @FindSubString, '')))/LEN(@FindSubString) as Occurance_ANIO_6
FROM ANIO
WHERE (LEN(ANIO_1) - LEN(REPLACE(ANIO_1, @FindSubString, '')))/LEN(@FindSubString) = @OccuranceChars
OR (LEN(ANIO_2) - LEN(REPLACE(ANIO_2, @FindSubString, '')))/LEN(@FindSubString) = @OccuranceChars
OR (LEN(ANIO_3) - LEN(REPLACE(ANIO_3, @FindSubString, '')))/LEN(@FindSubString) = @OccuranceChars
OR (LEN(ANIO_4) - LEN(REPLACE(ANIO_4, @FindSubString, '')))/LEN(@FindSubString) = @OccuranceChars
OR (LEN(ANIO_5) - LEN(REPLACE(ANIO_5, @FindSubString, '')))/LEN(@FindSubString) = @OccuranceChars
OR (LEN(ANIO_6) - LEN(REPLACE(ANIO_6, @FindSubString, '')))/LEN(@FindSubString) = @OccuranceChars
上面的查询将检查“ANIO_1”列中“2”号码是否正好存在3次。对于所有列,您可以重复相同的事情,
否则创建UDF - 用户定义的函数,该函数接受参数@FindSubString&Column值