SQL 열에서 문자의 인스턴스 수를 계산하는 방법
100개의 'Y' 또는 'N'자로 구성된 문자열인 SQL 열이 있습니다.예:
아니, 아니, 아니, 아니, 아니...
각 행에 있는 모든 'Y' 기호의 개수를 구하는 가장 쉬운 방법은 무엇입니까?
이 스니펫은 부울이 있는 특정 상황에서 작동합니다. "N이 아닌 사람은 몇 명입니까?"라고 대답합니다.
SELECT LEN(REPLACE(col, 'N', ''))
다른 상황에서 주어진 문자열에서 특정 문자(예: 'Y')의 발생 횟수를 계산하려고 했다면 다음을 사용합니다.
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
SQL Server에서:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
이것은 매번 정확한 결과를 주었습니다...
이건 내 스트라이프 분야야
노랑, 노랑, 노랑, 노랑, 노랑, 노랑, 검정, 노랑, 빨강, 노랑, 노랑, 검정
- 11 옐로우즈
- 2 블랙
- 1 레드
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red')
FROM t_Contacts
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]
N의 발생 횟수를 반환합니다.
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', '')) from Table
가장 쉬운 방법은 Oracle 기능을 사용하는 것입니다.
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
어쩌면 이런 것도...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
아래 솔루션은 제한이 있는 문자열에서 존재하는 문자가 없음을 확인하는 데 도움이 됩니다.
SELECT LEN(내 열, 'N', '')을 사용하지만 아래 조건에서 제한 및 잘못된 출력:
LEN을 선택합니다('YYNYNYNY', 'N', '');
--8 --정답LEN을 선택합니다(교체('123a123a12', 'a', '');
--8 --잘못됨LEN을 선택합니다(교체('123a123a12', '1', '');
--7 --잘못됨
올바른 출력을 위해 아래 솔루션을 사용해 보십시오.
- 함수를 만들고 요구 사항에 따라 수정합니다.
- 그리고 아래와 같은 통화 기능
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
이것을 먹어보세요.
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
하나 이상의 문자를 포함하는 문자열 인스턴스 수를 계산하려면 이전 솔루션을 regex와 함께 사용하거나 이 솔루션에서 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를 생성한 반면:
조 블로깅스
생성된 10, 그리고
조 블로깅스, 존 스미스
생성된 20.
따라서 솔루션을 다음과 같이 약간 수정했는데, 이는 저에게 적합합니다.
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
나는 누군가가 그것을 하는 더 나은 방법을 생각해 낼 수 있다고 확신합니다!
해야 할 에는 두 종 이 상 의 문 가 자 포 에 문 서 수 있 계 수 습 니 다 사 할 용 대 신 경 류 하 우 야 는 문 산 해 를 열 자 자 함 된 ▁instead ▁of ▁if ▁use ▁the ▁you ▁can 두 ▁in ▁with ▁more ▁kinds 있 ▁then ▁2 s 니 습 ▁you 다 ▁of ▁a ▁char 류 종 ▁string'n' -
필요한 char를 허용하는 char의 연산자 또는 정규식이 있습니다.
SELECT LEN(REPLACE(col, 'N', ''))
사용해 보십시오.
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);
단일 문자 발생 수와 주 문자열의 하위 문자열 발생 수를 결정합니다.
사용해 볼 수도 있습니다.
-- 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
출력:
예를 들어 SQL Column ->name은 column name " (그리고 doblequote's is empty)에서 i am replace a with no character @")의 문자(a) 인스턴스 수를 계산합니다.
TESTING에서 len(이름)- len(이름, 'a', )을 선택합니다.
셀렉트 렌('YYNYNYNY'-len(교체(')YYNYNYNY','y',')
DECLARE @char NVARCHAR(50);
DECLARE @counter INT = 0;
DECLARE @i INT = 1;
DECLARE @search NVARCHAR(10) = 'Y'
SET @char = N'YYNYNYYNNNYYNY';
WHILE @i <= LEN(@char)
BEGIN
IF SUBSTRING(@char, @i, 1) = @search
SET @counter += 1;
SET @i += 1;
END;
SELECT @counter;
Oracle SQL에서 올바른 형식의 전화 번호를 전달하는 사용자가 있는지 확인하기 위해 사용한 내용은 다음과 같습니다.
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
첫 번째 부분은 전화 번호에 숫자만 있는지 확인하고 하이픈을 사용하는지 확인하며 두 번째 부분은 전화 번호에 하이픈이 두 개만 있는지 확인합니다.
언급URL : https://stackoverflow.com/questions/1860457/how-to-count-instances-of-character-in-sql-column
'programing' 카테고리의 다른 글
PL/SQL에 대한 코드 적용 범위 (0) | 2023.08.04 |
---|---|
MariaDB prepareStatement가 where 절에 대한 characterSet을 변환하지 않습니다. (0) | 2023.08.04 |
패치 가져오기 요청이 허용되지 않습니다. (0) | 2023.08.04 |
데이터베이스 테이블을 만들 때 Zoomla! 3 설치가 중지됩니다. (0) | 2023.07.30 |
Oracle Forms에서 PL/SQL 부울 변수 평가 (0) | 2023.07.30 |