133

100個の「Y」または「N」文字の文字列であるSQL列があります。例えば:

YYNYNYYNNNYYNY..。

各行のすべての「Y」記号の数を取得する最も簡単な方法は何ですか。

4

17 に答える 17

372

このスニペットは、ブール値がある特定の状況で機能します。「非Nはいくつありますか?」と答えます。

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

別の状況で、特定の文字列内の特定の文字(たとえば、「Y」)の出現を実際にカウントしようとした場合は、次を使用します。

SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
于 2009-12-07T14:58:21.490 に答える
105

SQL Serverの場合:

SELECT LEN(REPLACE(myColumn, 'N', '')) 
FROM ...
于 2009-12-07T14:57:48.603 に答える
25

これにより、毎回正確な結果が得られました...

これは私のStripesフィールドにあります...

黄、黄、黄、黄、黄、黄、黒、黄、黄、赤、黄、黄、黄、黒

  • 11 イエロー
  • 2 黒
  • 1 赤
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red') 
  FROM t_Contacts
于 2012-11-16T00:30:19.937 に答える
3

最も簡単な方法は、Oracle 関数を使用することです。

SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
于 2016-04-27T10:42:34.650 に答える
2

多分このようなもの...

SELECT
    LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
    SomeTable
于 2009-12-07T14:58:19.743 に答える
0

これを試して

declare @v varchar(250) = 'test.a,1  ;hheuw-20;'
-- LF   ;
select len(replace(@v,';','11'))-len(@v)
于 2015-11-10T10:06:31.700 に答える
0

これを試して:

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

これは、メイン文字列内の単一文字の出現数とサブストリングの出現数を決定します。

于 2016-07-11T12:57:02.517 に答える
0

複数の文字を含む文字列のインスタンスの数をカウントする場合は、正規表現で以前のソリューションを使用するか、このソリューションで 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
于 2016-09-09T17:24:49.577 に答える