Tengo una tabla MySQL llamada table_1 que tiene una columna llamada col_1 del tipo TEXT. Estoy intentando consultar una fila que tiene un cierto valor usando esta declaración, pero no se devuelve ningún dato.

SELECT * FROM table _1 WHERE col_1 = '1325'

Sin embargo, cuando utilicé esta declaración, obtengo datos.

SELECT * FROM table_1 WHERE col_1 LIKE '%1325%'

¿Cómo consigo que funcione la primera declaración?

1
Joe Mark 8 sep. 2018 a las 20:39

3 respuestas

La mejor respuesta

Si la selección con WHERE col_1 LIKE '%1325%' devuelve un valor que se parece a 1325, pero luego WHERE col_1 = '1325' no?

Entonces probablemente sea por personajes invisibles.

Por ejemplo, si el valor de col_1 es '1325'.
Debido al espacio extra, ese valor no es igual a '1325'.
Pero contiene '1325', por lo que LIKE lo encontrará.
Es fácil no notar lo que no es visible.

Lo que puede hacer es TRIM el valor, entonces esos espacios se eliminan antes de compararlo con =.

SELECT * FROM table_1 WHERE TRIM(col_1) = '1325';

Tenga en cuenta que un TRIM predeterminado o RTRIM elimina solo los espacios.
Para que eso funcione para otros caracteres de espacio en blanco, el SQL se vuelve un poco más largo.

SELECT * FROM table_1 
WHERE TRIM(Replace(Replace(Replace(col_1,'\t',''),'\n',''),'\r','')) = '1325';

¿Y si desea tener evidencia visual si esto es causado por espacios en blanco invisibles?
Luego use LIKE y CONCAT algo al principio y al final de la columna. Entonces los espacios serán fáciles de notar en el resultado.

select CONCAT('[',col_1,']') AS Test, t.* from table_1 t where col_1 like '%1325%';

Puede probarlo aquí

1
LukStorms 8 sep. 2018 a las 19:00

La segunda declaración significa que los datos contienen 1325 pero no tienes una fila que contenga 13 Espero que lo hayas conseguido gracias

-2
Marwan Elfatrani 8 sep. 2018 a las 17:43

Porque no realiza pruebas con: - ** SELECT * FROM table _1 WHERE col_1 = "1325" **

0
Alejandro López 8 sep. 2018 a las 17:53