2012-01-28 3 views
13

최근에 내 사이트 중 하나를 레코딩했으며 데이터베이스 구조가 약간 다릅니다.특정 열의 각 필드에서 특정 텍스트를 제거하는 SQL 쿼리?

나는 다음과 같은 변환하기 위해 노력하고있어 다음 속으로

*----*----------------------------* 
| id | file_name     | 
*----*----------------------------*  
| 1 | 1288044935741310953434.jpg | 
*----*----------------------------* 
| 2 | 1288044935741310352357.rar | 
*----*----------------------------* 

:

*----*----------------------------* 
| id | file_name     | 
*----*----------------------------*  
| 1 | 1288044935741310953434  | 
*----*----------------------------* 
| 2 | 1288044935741310352357  | 
*----*----------------------------* 

내가 PHP와 foreach 루프를 할 수 있다는 것을 알고, 오프 파일 확장자를 폭발 끝, 각 행을 그런 식으로 업데이트하지만 작업에 대한 쿼리가 너무 많아 보인다.

실행할 수있는 file_name 열의 각 필드에서 파일 exentision을 제거 할 수있는 SQL 쿼리가 있습니까?

답변

37

네이티브 MySQL에서 the REPLACE() function을 사용하면 간단한 문자열 교체를 수행 할 수 있습니다.

UPDATE tbl SET file_name = REPLACE(file_name, '.jpg', ''); 
UPDATE tbl SET file_name = REPLACE(file_name, '.rar', ''); 
+1

+1 언젠가 그의 데이터에 언젠가 여러 확장자가 포함되어 있다면주의해야합니다. – pilcrow

+0

오 남자 너무 단순 ... 아름다움 – baash05

+2

'some.rare.animal.jpg' ->'somee.animel' carefull;) –

3

이 작동합니다 : 어떤 경우

UPDATE MyTable 
SET file_name = SUBSTRING(file_name,1, CHAR_LENGTH(file_name)-4) 
+2

UPDATE를 두 번 실행하지 마십시오 ... – pilcrow

+0

@pilcrow 업데이트를 두 번 실행하는 방법을 보지 못했습니다! –

+1

right :)하지만 영업 사원이이 UPDATE를 두 번 이상 실행하면 (예 : 매일 기록을 수정하는 야간 작업), 이미 다듬어 진 파일 이름 부분을 잘라 버릴 수 있습니다. – pilcrow

0

file_name에서,이 실행될 때마다 최종 확장을 제거합니다. 확장과 관련하여 불가지론 적입니다 (그래서 언젠가는 ".foo"를 가질 수 있습니다). 그리고 무한한 기록을 해치지 않을 것입니다.

UPDATE tbl 
    SET file_name = TRIM(TRAILING CONCAT('.', SUBSTRING_INDEX(file_name, '.', -1) FROM file_name);