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

时间:2009-12-07 14:56:07

标签: sql string tsql count symbols

我有一个sql列,它是一个100'Y'或'N'字符的字符串。例如:

  

... YYNYNYYNNNYYNY

获得每行中所有'Y'符号计数的最简单方法是什么。

16 个答案:

答案 0 :(得分:273)

此代码段适用于您有布尔值的特定情况:它回答“有多少非N?”。

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

如果在不同的情况下,您实际上是在尝试计算任何给定字符串中某个字符(例如“Y”)的出现次数,请使用:

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

答案 1 :(得分:82)

在SQL Server中:

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

答案 2 :(得分:13)

每次都给我准确的结果......

这是我的Stripes字段...... 黄色,黄色,黄,黄色,黄色,黄色,黑色,黄色,黄色,红色,黄色,黄色,黄色,黑色

  • 11黄色
  • 2 Black
  • 1 Red
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red') 
  FROM t_Contacts

答案 3 :(得分:13)

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]

答案 4 :(得分:3)

也许是这样的......

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

答案 5 :(得分:2)

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

SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME

答案 6 :(得分:1)

试试这个

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

答案 7 :(得分:1)

试试这个。 它决定了没有。单字符出现次数以及主字符串中的子字符串出现次数。

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);

答案 8 :(得分:1)

如果要计算具有多个字符的字符串实例的数量,可以使用前面的解决方案和regex,或者此解决方案使用STRING_SPLIT,我认为这是在SQL Server 2016中引入的。还有你' ll需要兼容级别130及更高。

pd.cut(df.distance, [-np.inf, 0.1, 0.5, np.inf], labels=[1,2,3])

0    1
1    1
2    2
3    3
4    3

ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130

答案 9 :(得分:1)

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

“约翰史密斯”

使用Nickf的方法生成12,而:

“乔博格斯,约翰史密斯”

生成10,

“Joe Bloggs,John Smith,John Smith”

生成20.

因此我稍微修改了以下解决方案,这对我有用:

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

我确信有人可以想出更好的方法!

答案 10 :(得分:1)

您也可以尝试这个

-- 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

输出:

enter image description here

答案 11 :(得分:1)

以下解决方案帮助从有限制的字符串中找出不存在的字符:

  

1)使用SELECT LEN(REPLACE(myColumn,'N',``))),但有限制和   在以下情况下输出错误:

     

SELECT LEN(REPLACE('YYNYNYYNNNYYNY','N',''));
  --8-正确

     

SELECT LEN(REPLACE('123a123a12','a',''));
  --8-错

     

SELECT LEN(REPLACE('123a123a12','1',''));
  --7-错

2)尝试以下解决方案以获取正确的输出:

  • 创建一个函数,并根据要求进行修改。
  • 并按如下所示调用函数
  

选择dbo.vj_count_char_from_string('123a123a12','2');
  --2-正确

     

选择dbo.vj_count_char_from_string('123a123a12','a');
  --2-正确

-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      VIKRAM JAIN
-- Create date: 20 MARCH 2019
-- Description: Count char from string
-- =============================================
create FUNCTION vj_count_char_from_string
(
    @string nvarchar(500),
    @find_char char(1)  
)
RETURNS integer
AS
BEGIN
    -- Declare the return variable here
    DECLARE @total_char int; DECLARE @position INT;
    SET @total_char=0; set @position = 1;

    -- Add the T-SQL statements to compute the return value here
    if LEN(@string)>0
    BEGIN
        WHILE @position <= LEN(@string) -1
        BEGIN
            if SUBSTRING(@string, @position, 1) = @find_char
            BEGIN
                SET @total_char+= 1;
            END
            SET @position+= 1;
        END
    END;

    -- Return the result of the function
    RETURN @total_char;

END
GO

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

  

例如,计算SQL列中字符(a)的计数实例 - &gt; name是列名   &#39;&#39; (并且在doblequote中是空的我用nocharecter替换了一个@&#39;&#39;)

选择len(姓名) - len(替换(姓名,&#39; a&#39;,&#39;&#39;))来自TESTING

选择len(&#39; YYNYNYYNNNYYNY&#39;) - len(替换(&#39; YYNYNYYNNNYYNY&#39;,&#39; y&#39;,&#39;&# 39))

答案 14 :(得分:0)

如果您需要用超过2种字符计数字符串中的字符,则可以使用某些运算符或 regex 代替'n' -接受您需要的字符。

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

答案 15 :(得分:0)

这将返回N的出现次数

select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', '')) from Table