텍스트 필드가 있는 MySql 테이블이 있습니다.
텍스트 필드는 다음과 유사한 임의의 순서로 채워집니다(정수 값일 수 있음).
14,4,24,20,34,2
34,67,4,98,64
문자열(텍스트 필드 값)에는 선행 또는 후행 쉼표가 없습니다.
예를 들어 '4'만 총 발생 횟수를 계산하고 싶습니다.
이 두 행에 대한 쿼리는 7 대신 2를 반환해야 합니다.
이런 쿼리를 어떻게 작성해야 할지 모르겠습니다.
감사합니다
P粉8074716042023-09-10 00:31:48
REGEXP_REPLACE
를 사용하여 4를 찾아 문자열에서 제거하고 길이 차이를 계산할 수 있습니다.
이렇게 하면 각 행의 "4" 개수가 반환되며, 그런 다음 모두 더할 수 있습니다.
으아악 AS
를 사용하여 값의 이름을 바꿀 수도 있습니다.
(?<=^|,)4(?=$|,)
는 다음 기준을 충족하는 "4"를 찾고 있습니다.
쿼리는 매우 보기 흉하지만 다음을 사용할 수 있습니다.
으아악모든 "4"를 밑줄(_
)로 바꾸는 것으로 시작합니다(예: 54에서 4를 바꾸지 않음).
그런 다음 밑줄이 있는 문자열의 길이에서 밑줄이 없는 문자열의 길이를 뺀 값을 계산합니다. 이는 목록에 있는 "4"의 수입니다.
REPLACE
? 쿼리를 테스트하는 동안 MySQL의 REPLACE
函数的行为与我们期望的不同。以这个例子为例:4,4,4,4,4
,如果使用单个Replace,我们期望它返回_,_,_,_,_
。然而,它会原地替换逗号,如果逗号“匹配”两次,它不会计算第二次,这就是为什么需要2个REPLACE(..., ",4,", ",_,")
함수가 예상한 것과 다르게 동작하는 것을 발견했습니다. 이 예를 사용하면 4,4,4,4,4
입니다. 단일 바꾸기를 사용하면 _,_,_,_,_
를 반환할 것으로 예상됩니다. 그러나 쉼표를 제자리에서 대체하고 쉼표가 두 번 "일치"하면 두 번째로 계산되지 않으므로 2 REPLACE(..., ",4,", ",_, ")
가 필요합니다.