2012-01-28 7 views
13

Recientemente he recodificado uno de mis sitios, y la estructura de la base de datos es un poco diferente.Consulta SQL para eliminar cierto texto de cada campo en una columna específica?

Estoy tratando de convertir el siguiente:

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

en las siguientes:

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

sé que podría hacer un bucle foreach con PHP y explotar la extensión del archivo de la fin, y actualice cada fila de esa manera, pero parece que hay demasiadas consultas para la tarea.

¿Hay alguna consulta SQL que pueda ejecutar que me permita eliminar el archivo exentision de cada campo en la columna file_name?

Respuesta

37

Puede usar the REPLACE() function en MySQL nativo para hacer un simple reemplazo de cadenas.

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

+1 OP debe tener cuidado si sus datos algún día contienen múltiples extensiones. – pilcrow

+0

Oh hombre tan simple ... belleza – baash05

+2

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

3

Esto debería funcionar:

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

No ejecute esa ACTUALIZACIÓN dos veces ... – pilcrow

+0

@pilcrow ¡¡No veo cómo se ejecutará la actualización dos veces !! –

+1

right :) Pero si el OP ejecuta esta ACTUALIZACIÓN más de una vez (por ejemplo, como un trabajo nocturno para arreglar los registros de ese día), cortará partes de nombres de archivos ya recortados. – pilcrow

0

Esto se tira de la última prórroga, en su caso, de file_name cada vez que se ejecuta. Es agnóstico con respecto a la extensión (por lo que puede tener ".foo" algún día) y no dañará los registros sin extensión.

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