복붙노트

[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. ==============================

    1.이 트릭을 수행해야합니다

    이 트릭을 수행해야합니다

    SELECT 
        title,
        description,    
        ROUND (   
            (
                LENGTH(description)
                - LENGTH( REPLACE ( description, "value", "") ) 
            ) / LENGTH("value")        
        ) AS count    
    FROM <table> 
    
  2. ==============================

    2.이 시도:

    이 시도:

     select TITLE,
            (length(DESCRIPTION )-length(replace(DESCRIPTION ,'value','')))/5 as COUNT 
      FROM <table> 
    

  3. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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)));

  8. 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