VARCHAR 필드의 문자열 발생 횟수를 카운트하시겠습니까?
제 테이블은 다음과 같습니다.
TITLE | DESCRIPTION
------------------------------------------------
test1 | value blah blah value
test2 | value test
test3 | test test test
test4 | valuevaluevaluevaluevalue
각 DESCRIPTION에서 문자열이 발생한 횟수를 반환하는 방법을 찾고 있습니다.
따라서 'value'가 표시되는 횟수를 카운트하는 경우 sql 문은 다음을 반환합니다.
TITLE | DESCRIPTION | COUNT
------------------------------------------------------------
test1 | value blah blah value | 2
test2 | value test | 1
test3 | test test test | 0
test4 | valuevaluevaluevaluevalue | 5
어떻게 할 수 있을까요?저는 php를 전혀 사용하지 않고 mysql만 사용하고 싶습니다.
이렇게 하면 효과가 있습니다.
SELECT
title,
description,
ROUND (
(
LENGTH(description)
- LENGTH( REPLACE ( description, "value", "") )
) / LENGTH("value")
) AS count
FROM <table>
@yannis 솔루션의 조금 더 단순하고 효과적인 변형:
SELECT
title,
description,
CHAR_LENGTH(description) - CHAR_LENGTH( REPLACE ( description, 'value', '1234') )
AS `count`
FROM <table>
차이점은 "value" 문자열을 1글자의 짧은 문자열(이 경우 1234)로 대체한다는 것입니다.이렇게 하면 정수 값을 얻기 위해 분할 및 반올림할 필요가 없습니다.
일반 버전(모든 니들 문자열에서 작동):
SET @needle = 'value';
SELECT
description,
CHAR_LENGTH(description) - CHAR_LENGTH(REPLACE(description, @needle, SPACE(LENGTH(@needle)-1)))
AS `count`
FROM <table>
이것을 시험해 보세요.
select TITLE,
(length(DESCRIPTION )-length(replace(DESCRIPTION ,'value','')))/5 as COUNT
FROM <table>
SQL 바이올린 데모
SQL SERVER에서는 다음과 같은 답이 있습니다.
Declare @t table(TITLE VARCHAR(100), DESCRIPTION VARCHAR(100))
INSERT INTO @t SELECT 'test1', 'value blah blah value'
INSERT INTO @t SELECT 'test2','value test'
INSERT INTO @t SELECT 'test3','test test test'
INSERT INTO @t SELECT 'test4','valuevaluevaluevaluevalue'
SELECT TITLE,DESCRIPTION,Count = (LEN(DESCRIPTION) - LEN(REPLACE(DESCRIPTION, 'value', '')))/LEN('value')
FROM @t
결과
TITLE DESCRIPTION Count
test1 value blah blah value 2
test2 value test 1
test3 test test test 0
test4 valuevaluevaluevaluevalue 5
MySQL을 설치하지 않고 고글을 돌리면 LENGH는 LENGH이고 REPLACE는 LENGH입니다.
따라서 MySql의 동등한 쿼리는
SELECT TITLE,DESCRIPTION, (LENGTH(DESCRIPTION) - LENGTH(REPLACE(DESCRIPTION, 'value', '')))/LENGTH('value') AS Count
FROM <yourTable>
MySql에서도 잘 됐는지 알려주세요.
이 기능을 사용할 수 있습니다.
CREATE FUNCTION count_str(haystack TEXT, needle VARCHAR(32))
RETURNS INTEGER DETERMINISTIC
BEGIN
RETURN ROUND((CHAR_LENGTH(haystack) - CHAR_LENGTH(REPLACE(haystack, needle, ""))) / CHAR_LENGTH(needle));
END;
다음으로 공간 기법을 사용한mysql 함수를 나타냅니다(mysql 5.0 + 5.5로 테스트). CREATE FUNCTION count_str( haystack TEXT, needle VARCHAR(32)) RETURNS INTEGER DETERMINISTIC RETURN LENGTH(haystack) - LENGTH( REPLACE ( haystack, needle, space(char_length(needle)-1)) );
SELECT
id,
jsondata,
ROUND (
(
LENGTH(jsondata)
- LENGTH( REPLACE ( jsondata, "sonal", "") )
) / LENGTH("sonal")
)
+
ROUND (
(
LENGTH(jsondata)
- LENGTH( REPLACE ( jsondata, "khunt", "") )
) / LENGTH("khunt")
)
AS count1 FROM test ORDER BY count1 DESC LIMIT 0, 2
감사합니다.Yannis 씨, 당신의 솔루션은 저에게 효과가 있었습니다.여기서는 순서와 제한이 있는 여러 키워드에 대해 같은 솔루션을 공유하고 있습니다.
대부분의 경우 다음 함수는 각각 LENGH 및 REPLACE입니다(SQL Server 사용자는 LENGH가 아닌 내장 함수 LEN을 사용합니다).
예: 문자열 "10,CLARK,MANAGER"의 쉼표 개수
select (length('10,CLARK,MANAGER')-
length(replace('10,CLARK,MANAGER',',','')))/length(',')
as cnt from t1
언급URL : https://stackoverflow.com/questions/12344795/count-the-number-of-occurrences-of-a-string-in-a-varchar-field
'programing' 카테고리의 다른 글
Python의 정적 클래스 변수 및 메서드 (0) | 2022.11.26 |
---|---|
문자열이 Unicode인지 ASCII인지 확인하려면 어떻게 해야 하나요? (0) | 2022.11.26 |
MariaDB가 스킵 네트워킹으로 구성되었지만 포트 3306이 열려 있습니다. (0) | 2022.11.26 |
MariaDB 클라이언트가 utf8mb4를 사용하도록 강제 설정 (0) | 2022.11.26 |
Python에서 새 사전 만들기 (0) | 2022.11.26 |