찾다

 >  Q&A  >  본문

mysql 텍스트 필드에서 정확한 일치 개수 가져오기

텍스트 필드가 있는 MySql 테이블이 있습니다.

텍스트 필드는 다음과 유사한 임의의 순서로 채워집니다(정수 값일 수 있음).

14,4,24,20,34,2

34,67,4,98,64

문자열(텍스트 필드 값)에는 선행 또는 후행 쉼표가 없습니다.

예를 들어 '4'만 총 발생 횟수를 계산하고 싶습니다.

이 두 행에 대한 쿼리는 7 대신 2를 반환해야 합니다.

이런 쿼리를 어떻게 작성해야 할지 모르겠습니다.

감사합니다

P粉493534105P粉493534105445일 전674

모든 응답(1)나는 대답할 것이다

  • P粉807471604

    P粉8074716042023-09-10 00:31:48

    MySQL 8.X의 경우

    REGEXP_REPLACE를 사용하여 4를 찾아 문자열에서 제거하고 길이 차이를 계산할 수 있습니다.

    으아악

    이렇게 하면 각 행의 "4" 개수가 반환되며, 그런 다음 모두 더할 수 있습니다.

    으아악

    AS를 사용하여 값의 이름을 바꿀 수도 있습니다.

    정규식 설명

    (?<=^|,)4(?=$|,)는 다음 기준을 충족하는 "4"를 찾고 있습니다.

    • 쉼표 앞이나 문자열 시작 앞
    • 쉼표 뒤 또는 문자열 끝 뒤

    이전 버전의 MySQL의 경우

    쿼리는 매우 보기 흉하지만 다음을 사용할 수 있습니다.

    으아악

    모든 "4"를 밑줄(_)로 바꾸는 것으로 시작합니다(예: 54에서 4를 바꾸지 않음). 그런 다음 밑줄이 있는 문자열의 길이에서 밑줄이 없는 문자열의 길이를 뺀 값을 계산합니다. 이는 목록에 있는 "4"의 수입니다.

    왜 이렇게 많이 쓰이는 걸까요REPLACE?

    쿼리를 테스트하는 동안 MySQL의 REPLACE函数的行为与我们期望的不同。以这个例子为例:4,4,4,4,4,如果使用单个Replace,我们期望它返回_,_,_,_,_。然而,它会原地替换逗号,如果逗号“匹配”两次,它不会计算第二次,这就是为什么需要2个REPLACE(..., ",4,", ",_,") 함수가 예상한 것과 다르게 동작하는 것을 발견했습니다. 이 예를 사용하면 4,4,4,4,4입니다. 단일 바꾸기를 사용하면 _,_,_,_,_를 반환할 것으로 예상됩니다. 그러나 쉼표를 제자리에서 대체하고 쉼표가 두 번 "일치"하면 두 번째로 계산되지 않으므로 2 REPLACE(..., ",4,", ",_, ")가 필요합니다.

    회신하다
    0
  • 취소회신하다