답변:
이 스 니펫은 부울이있는 특정 상황에서 작동합니다. "비 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
0을 Len(' ')
반환 하므로 0으로 나눕니다.
아마 이런 ...
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)
두 개 이상의 문자가있는 문자열의 인스턴스 수를 계산하려면 정규식과 함께 이전 솔루션을 사용하거나이 솔루션이 SQL Server 2016에 도입되었다고 생각하는 STRING_SPLIT를 사용합니다. 또한 호환성이 필요합니다. 레벨 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가 제공하는 두 번째 답변은 매우 영리합니다. 그러나 대상 하위 문자열 1의 문자 길이에 대해서만 작동하고 공백을 무시합니다. 특히 내 데이터에는 두 개의 선행 공백이 있었는데, 오른쪽의 모든 문자가 제거되면 SQL이 유용하게 제거합니다 (이는 몰랐습니다). 그 의미
" 존 스미스"
Nickf의 방법을 사용하여 12를 생성 한 반면 :
"Joe Bloggs, John Smith"
10을 생성하고
"Joe Bloggs, John Smith, John Smith"
생성 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) 올바른 출력을 위해 아래 솔루션을 시도하십시오.
select dbo.vj_count_char_from_string ( '123a123a12', '2');
--2-정답select 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
2 가지 이상의 문자가있는 문자열에서 문자를 계산해야하는 경우 필요한 문자를 허용하는 문자 의 'n' -
일부 연산자 또는 정규식 대신 사용할 수 있습니다 .
SELECT LEN(REPLACE(col, 'N', ''))
누군가가 올바른 형식의 전화 번호를 전달하고 있는지 확인하기 위해 Oracle SQL에서 사용한 내용은 다음과 같습니다.
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
첫 번째 부분은 전화 번호에 숫자와 하이픈 만 있는지 확인하고 두 번째 부분은 전화 번호에 두 개의 하이픈 만 있는지 확인합니다.
예를 들어 SQL 열에서 (a) 문자의 인스턴스 수를 계산하려면-> 이름은 열 이름입니다 ''(그리고 doblequote에서 비어 있습니다. a를 nocharecter @ ''로 바꿉니다)
TESTING에서 len (name)-len (replace (name, 'a', '')) 선택
선택 len ( 'YYNYNYYNNNYYNY')-len (replace ( 'YYNYNYYNNNYYNY', 'y', ''))