如何计算SQL Column中字符的实例

我有一个SQLstring是100个'Y'或'N'字符的string。 例如:

YYNYNYYNNNYYNY …

获得每行中所有“Y”符号的最简单方法是什么?

如果MS SQL

SELECT LEN(REPLACE(myColumn, 'N', '')) FROM ... 

这段代码适用于具有布尔值的特定情况:它回答“有多less个非N?

 SELECT LEN(REPLACE(`col`, 'N', '')) 

如果在不同的情况下,您实际上正在计算任何给定string中特定字符(例如“Y”)的出现次数,请使用以下命令:

 SELECT LEN(col) - LEN(REPLACE(col, 'Y', '')) 

这给了我每次准确的结果…

这是在我的条纹领域…黄,黄,黄,黄,黄,黑,黄,黄,红,黄,黄,黄,黑

  • 11黄色
  • 2黑色
  • 1红色
 SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red') FROM t_Contacts 
 DECLARE @StringToFind VARCHAR(100) = "Text To Count" SELECT (LEN([Field To Search]) - LEN(REPLACE([Field To Search],@StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) --protect division from zero FROM [Table To Search] 

也许这样的事情…

 SELECT LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs FROM SomeTable 

最简单的方法是使用Oracle函数:

 SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME 

尝试这个

 declare @v varchar(250) = 'test.a,1 ;hheuw-20;' -- LF ; select len(replace(@v,';','11'))-len(@v) 

尝试这个。 它决定了否。 单字符出现以及主string中的子string出现。

 SELECT COUNT(DECODE(SUBSTR(UPPER(:main_string),rownum,LENGTH(:search_char)),UPPER(:search_char),1)) search_char_count FROM DUAL connect by rownum <= length(:main_string); 

如果要计算多个单个字符的string实例的数量,可以将以前的解决scheme与正则expression式一起使用,或者此解决scheme使用STRING_SPLIT,我相信它是在SQL Server 2016中引入的。还需要兼容性130级以上。

 ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130 

 --some data DECLARE @table TABLE (col varchar(500)) INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)' INSERT INTO @table SELECT 'whaCHAR(10)teverwhateverCHAR(10)' INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)~' --string to find DECLARE @string varchar(100) = 'CHAR(10)' --select SELECT col , (SELECT COUNT(*) - 1 FROM STRING_SPLIT (REPLACE(REPLACE(col, '~', ''), 'CHAR(10)', '~'), '~')) AS 'NumberOfBreaks' FROM @table 

nickf提供的第二个答案是非常聪明的。 但是,它仅适用于目标子string1的字符长度并忽略空格。 具体来说,在我的数据中有两个前导空格,当右侧的所有字符都被删除时,SQL有助于删除(我不知道这一点)。 这意味着

“ 约翰·史密斯”

用Nickf的方法产生了12个,而:

“Joe Bloggs,约翰·史密斯”

生成10,和

“Joe Bloggs,John Smith,John Smith”

生成20。

因此,我已经稍微修改了解决scheme,以下是适用于我的方法:

 Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS 

我相信有人可以想到一个更好的方法来做到这一点!

你也可以试试这个

 -- DECLARE field because your table type may be text DECLARE @mmRxClaim nvarchar(MAX) -- Getting Value from table SELECT top (1) @mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362 -- Main String Value SELECT @mmRxClaim AS MainStringValue -- Count Multiple Character for this number of space will be number of character SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'GS', ' ')) AS CountMultipleCharacter -- Count Single Character for this number of space will be one SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'G', '')) AS CountSingleCharacter 

输出:

在这里输入图像说明

例如计算字符(a)在SQL列的计数实例列 – “名称是列名”(在doblequote的是空的,我用nocharecter @'replace一个)

从TESTING中selectlen(name) – len(replace(name,'a',''))

selectlen('YYNYNYYNNNYYNY') – len(replace('YYNYNYYNNNYYNY','y',''))

以下是我在Oracle SQL中用来查看是否有人传递格式正确的电话号码:

 WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2 

第一部分检查电话号码是否只有数字,连字符和第二部分检查电话号码是否只有两个连字符。