2012-01-28 29 views
13

Gần đây, tôi đã mã hóa một trong các trang web của mình và cấu trúc cơ sở dữ liệu hơi khác một chút.Truy vấn SQL để xóa văn bản nhất định khỏi mỗi trường trong một cột cụ thể?

Tôi đang cố gắng để chuyển đổi như sau:

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

Into the sau:

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

Tôi biết rằng tôi có thể làm một vòng lặp foreach với PHP, và phát nổ phần mở rộng tập tin ra khỏi kết thúc và cập nhật từng hàng theo cách đó, nhưng điều đó có vẻ giống như quá nhiều truy vấn cho tác vụ.

Có bất kỳ truy vấn SQL nào mà tôi có thể chạy có cho phép tôi xóa bỏ phần exentision của tệp khỏi mỗi trường trong cột file_name không?

Trả lời

37

Bạn có thể sử dụng the REPLACE() function trong MySQL gốc để thực hiện thay thế chuỗi đơn giản.

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

+1 OP nên cẩn thận nếu dữ liệu của anh ấy một ngày nào đó chứa nhiều tiện ích mở rộng. – pilcrow

+0

Oh người đàn ông rất đơn giản ... vẻ đẹp – baash05

+2

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

3

này nên làm việc:

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

Không chạy UPDATE đó hai lần ... – pilcrow

+0

@pilcrow không thấy nó sẽ chạy cập nhật hai lần như thế nào !! –

+1

right :) Nhưng nếu OP chạy UPDATE này nhiều hơn một lần (nói, như là một công việc hàng đêm để sửa chữa hồ sơ của ngày đó), nó sẽ cắt bỏ phần của tên tập tin đã được cắt tỉa. – pilcrow

0

này sẽ lột phần mở rộng cuối cùng, nếu có, từ file_name mỗi lần nó được chạy. Nó là bất khả tri đối với phần mở rộng (vì vậy bạn có thể có ".foo" một số ngày) và sẽ không gây hại cho hồ sơ mở rộng.

UPDATE tbl 
    SET file_name = TRIM(TRAILING CONCAT('.', SUBSTRING_INDEX(file_name, '.', -1) FROM file_name); 
Các vấn đề liên quan