如何知道给出char的出现次数和出现的次数

问题描述 投票:-1回答:1

我正在使用SQL Server 2008,我有以下问题。

我有这样一张桌子:

enter image description here

每列代表一年,目的是知道在任何列中是否有重复的字符定义的次数(要查找的字符和出现的次数是参数)。

问题是,如何知道是否存在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次

感谢您的帮助,对不起我的英语

sql sql-server stored-procedures
1个回答
0
投票

我创建了一个样本。请参阅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值

© www.soinside.com 2019 - 2024. All rights reserved.