100個の「Y」または「N」文字の文字列であるSQL列があります。例えば:
YYNYNYYNNNYYNY..。
各行のすべての「Y」記号の数を取得する最も簡単な方法は何ですか。
このスニペットは、ブール値がある特定の状況で機能します。「非Nはいくつありますか?」と答えます。
SELECT LEN(REPLACE(col, 'N', ''))
別の状況で、特定の文字列内の特定の文字(たとえば、「Y」)の出現を実際にカウントしようとした場合は、次を使用します。
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
SQL Serverの場合:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
これにより、毎回正確な結果が得られました...
これは私のStripesフィールドにあります...
黄、黄、黄、黄、黄、黄、黒、黄、黄、赤、黄、黄、黄、黒
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red')
FROM t_Contacts
最も簡単な方法は、Oracle 関数を使用することです。
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
多分このようなもの...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
これを試して
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
これを試して:
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_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