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,", ",_, ")가 필요합니다.
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,", ",_, ")
가 필요합니다.