mysql 텍스트 필드에서 정확한 일치 개수 가져오기
P粉493534105
P粉493534105 2023-09-09 10:37:09
0
1
525

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

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

14,4,24,20,34,2

34,67,4,98,64

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

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

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

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

감사합니다

P粉493534105
P粉493534105

모든 응답 (1)
P粉807471604

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입니다. 단일 바꾸기를 사용하면_,_,_,_,_를 반환할 것으로 예상됩니다. 그러나 쉼표를 제자리에서 대체하고 쉼표가 두 번 "일치"하면 두 번째로 계산되지 않으므로 2REPLACE(..., ",4,", ",_, ")가 필요합니다.

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!