2012-10-25 4 views
1

Mysql Replace 함수는 지정된 열 또는 문자열에서 찾은 문자열을 바꿉니다. 열/문자열의 대체 개수를 제한 할 수있는 다른 방법이 있습니까?mysql은 문자열 개수 제한을 대체합니다.

# replace 32 from the string, there are 3 occurance 
SELECT REPLACE('32,138,149,145,146,121,134,127,129,120,132,232','32',''); 

# note: 132,232 converted to 1 and 2 
print>>> ,138,149,145,146,121,134,127,129,120,1,2 

어떻게 극복 할 수 있습니까?

+0

정확하게 32를 빈 문자열로 바꾸고 132와 232 같은 문자열을 바꾸지 않으시겠습니까? –

+0

정확한 '32'및 132와 232 등의 다른 조합을 바꾸려면이 방법이 유용 할 수 있습니다. http://stackoverflow.com/questions/6093813/how-to-limit-search-and-replace-string -in-mysql –

+0

고마워요,하지만 그 게시물을 내가 뭘 찾고 있는지 보지 못했습니다. 문자열에서 1을 바꾸기 만 제한하고 싶습니다. @Nedret Recep Solution 덕분에 – justnajm

답변

2

당신이 좋아하는 경우에, 당신은 또한 모두에 쉼표를 잘라 것, 또한 ','

SELECT REPLACE(CONCAT(',','32,138,149,145,146,121,134,127,129,120,132,232',','), ',32,', ','); 

을 Fictively ','함께 건초 더미을 연결 한 후 바늘을 찾아 '32'과 함께 교체 끝.

SELECT TRIM(BOTH ',' FROM REPLACE(CONCAT(',','32,138,149,145,146,121,134,127,129,120,132,232',','), ',32,', ',')); 
+0

srting 작업이 일반적으로 느립니다. ID 목록을 사용한다고 가정하고 ID 목록을 사용해야하는 경우 비표준 DB 구조를 사용합니다. DB 구조를 정규화하고 조인을 사용하는 것이 좋습니다. –

+0

InnoDB는 1250000+ 개 행에 비해 5000 개 이상의 레코드가있을 때 행이 5000x250 행으로 이동하게되므로 InnoDB는 행 잠금 기능을 제공하므로 업데이트 할 때 행 수가 1250000 개가 넘는 행과 비교할 때 5000 개 행을 사용하는 것이 좋습니다. 내가 할 수있는 최선의 솔루션에 감사드립니다. :) – justnajm