回答:
SQL Serverの場合:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
このスニペットは、ブール値がある特定の状況で機能します。「N以外の数はいくつありますか?」と答えます。
SELECT LEN(REPLACE(col, 'N', ''))
別の状況で、特定の文字列内の特定の文字(たとえば、「Y」)の出現を実際にカウントしようとした場合は、次のようにします。
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
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]
LEN(@StringToFind)
。
@StringToFind
nullまたは空になることはありません。
Field To Search
するとゼロがLen(' ')
返されるため、ゼロで除算されます。
多分このようなもの...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
これはNの発生数を返します
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', ''))
from Table
これを試して
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
複数の文字を含む文字列のインスタンスの数をカウントする場合は、正規表現で以前のソリューションを使用するか、このソリューションで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が提供する2番目の答えは非常に賢いです。ただし、1のターゲットサブストリングの文字長に対してのみ機能し、スペースは無視されます。具体的には、データに2つの先行スペースがあり、SQLは右側のすべての文字が削除されたときに、これを有効に削除しました(これは知りませんでした)。つまり
" ジョンスミス"
Nickfの方法を使用して12を生成しましたが、
「ジョー・ブログ、ジョン・スミス」
生成された10、
「ジョー・ブログ、ジョン・スミス、ジョン・スミス」
生成された20。
したがって、私はソリューションを次のように少し変更しました。
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
出力:
以下の解決策は、制限付きの文字列から存在する文字を見つけるのに役立ちます:
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
これは、誰かが正しい形式の電話番号を渡しているかどうかを確認するためにOracle SQLで使用したものです。
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
最初の部分では、電話番号に数字とハイフンのみが含まれているかどうかを確認し、2番目の部分では、電話番号に2つのハイフンのみが含まれているかどうかを確認します。
たとえば、SQLの文字(a)のカウントインスタンスを計算するには列->名前は列名 ''(およびdoblequoteは空です、私はnocharecter @ ''で置き換えます)
テストからlen(name)-len(replace(name、 'a'、 ''))を選択します
select len( 'YYNYNYYNNNYYNY')-len(replace( 'YYNYNYYNNNYYNY'、 'y'、 ''))