[SQL] 포함 된 VARCHAR 필드에 문자열의 발생 수를 계산?
SQL포함 된 VARCHAR 필드에 문자열의 발생 수를 계산?
나는이 같은 테이블이 있습니다 :
TITLE | DESCRIPTION
------------------------------------------------
test1 | value blah blah value
test2 | value test
test3 | test test test
test4 | valuevaluevaluevaluevalue
나는 문자열이 설명의 각각의 발생 횟수를 반환하는 방법을 알아 내려고 노력하고있다.
나는 배 '값'이 나타납니다의 수를 계산하려는 경우 따라서는 SQL 문은 다음을 반환합니다 :
TITLE | DESCRIPTION | COUNT
------------------------------------------------------------
test1 | value blah blah value | 2
test2 | value test | 1
test3 | test test test | 0
test4 | valuevaluevaluevaluevalue | 5
이 작업을 수행 할 수있는 방법이 있습니까? 난 그냥 MySQL은, 전혀 PHP를 사용하지 않습니다.
해결법
-
==============================
1.이 트릭을 수행해야합니다
이 트릭을 수행해야합니다
SELECT title, description, ROUND ( ( LENGTH(description) - LENGTH( REPLACE ( description, "value", "") ) ) / LENGTH("value") ) AS count FROM <table>
-
==============================
2.이 시도:
이 시도:
select TITLE, (length(DESCRIPTION )-length(replace(DESCRIPTION ,'value','')))/5 as COUNT FROM <table>
-
==============================
3.약간은 @yannis 솔루션의 간단하고 효과적인 변화를 비트 :
약간은 @yannis 솔루션의 간단하고 효과적인 변화를 비트 :
SELECT title, description, CHAR_LENGTH(description) - CHAR_LENGTH( REPLACE ( description, 'value', '1234') ) AS `count` FROM <table>
차이는 I가 1 짧은 문자 스트링 (이 경우 「1234」)로 "값"문자열을 대체한다는 것이다. 당신은 분열과 라운드 할 필요가 없습니다 이런 식으로 정수 값을 얻을 수 있습니다.
일반화 된 버전 (모든 바늘 문자열을 작동) :
SET @needle = 'value'; SELECT description, CHAR_LENGTH(description) - CHAR_LENGTH(REPLACE(description, @needle, SPACE(LENGTH(@needle)-1))) AS `count` FROM <table>
-
==============================
4.SQL 서버에서는이 답이다
SQL 서버에서는이 답이다
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을 설치해야하지만 동일 교체하면서 LEN의 등가 길이입니다 찾기 위해 이리저리 굴리는하지 않습니다.
MySQL의에 해당하는 쿼리가 있어야한다 그래서
SELECT TITLE,DESCRIPTION, (LENGTH(DESCRIPTION) - LENGTH(REPLACE(DESCRIPTION, 'value', '')))/LENGTH('value') AS Count FROM <yourTable>
그것은 또한 MySQL을 당신을 위해 일 있으면 알려 주시기 바랍니다.
-
==============================
5.여기에 그렇게하는 기능입니다.
여기에 그렇게하는 기능입니다.
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;
-
==============================
6.
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
감사합니다 야 니스, 당신의 솔루션은 나를 위해 일한 여기에 나는 순서와 한계 여러 키워드에 대한 동일한 솔루션을 공유하고있다.
-
==============================
7.이 공간 기술을 이용하여 MySQL의 함수이다 (5.0 + 5.5 시험) : FUNCTION COUNT_STR의 생성 (덤 텍스트 VARCHAR 바늘 (32)) INTEGER DETERMINISTIC 반환 RETURN 길이 (건초 더미) - 길이 (REPLACE (건초 더미, 바늘, 공간 (CHAR_LENGTH (바늘) -1)));
이 공간 기술을 이용하여 MySQL의 함수이다 (5.0 + 5.5 시험) : FUNCTION COUNT_STR의 생성 (덤 텍스트 VARCHAR 바늘 (32)) INTEGER DETERMINISTIC 반환 RETURN 길이 (건초 더미) - 길이 (REPLACE (건초 더미, 바늘, 공간 (CHAR_LENGTH (바늘) -1)));
from https://stackoverflow.com/questions/12344795/count-the-number-of-occurrences-of-a-string-in-a-varchar-field by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 오라클 데이터베이스와 일치하는 문자열의 큰 숫자를로드 할? (0) | 2020.03.12 |
---|---|
[SQL] 어떻게 변환 쉼표는 오라클의 행에 값을 분리? (0) | 2020.03.12 |
[SQL] 집계 함수없이 TSQL 피벗 (0) | 2020.03.12 |
[SQL] JSON 배열의 요소를 찾기위한 색인 (0) | 2020.03.12 |
[SQL] SCOPE_IDENTITY (), 신원 (의 차이점은 무엇입니까), @@ IDENTITY 및 IDENT_CURRENT ()? (0) | 2020.03.12 |