Declaración "Me gusta" de SQL: 'Jeff' LIKE 'Jeff' = falso?

EDITAR: Problema resuelto. Fue mi lectura la incorrecta, no el SQL: p

¡Hola!

Estaba leyendo en mi libro de base de datos sobre la declaración LIKE SQL. Decía esto:

SELECT whatever FROM whereever WHERE 'Jeff' LIKE 'Jeff';

Continuó diciendo que la declaración 'Jeff' COMO 'Jeff' siempre devolvería falso. El libro no me dijo por qué, ni puedo encontrar esto en ningún otro lugar. ¿Significa esto entonces que el siguiente SQL también devolvería nulo?

SELECT W.name FROM whereever W WHERE w.name LIKE 'Jeff';

Como referencia, el libro es: Sistemas de gestión de bases de datos: Ramakrishnan - Gehrke De McGRAW - Hill. Edición internacional. ISBN 0-07-123151-X PÁGINA 140.

preguntado el 16 de mayo de 11 a las 18:05

Eso es incorrecto, al menos para SQL Server. select 1 WHERE 'Jeff' LIKE 'Jeff' devoluciones 1. -

Eso no parece correcto en absoluto ... de hecho, acabo de probarlo con SQL Server y eso no es cierto. ¿Quizás falta algún contexto en esta cita? -

Vea mi respuesta: el póster se ha copiado incorrectamente del libro, que tiene un espacio en una de las cadenas y está señalando cómo LIKE maneja los espacios en blanco. -

¿Puede proporcionar la cotización exacta y el texto por favor? Quizás haya algo más. x como x es perfecta y razonablemente correcta en todos los sistemas convencionales. -

Una vez más, estás leyendo mal el libro. Hay un espacio después de Jeff en el segundo elemento de cada ejemplo. Es Thus, 'Jeff'='Jeff ' is true while 'Jeff' LIKE 'Jeff ' is false. -

6 Respuestas

Eché un vistazo a esa página (Amazon "busca dentro este libro") y la clave que se está perdiendo es que el autor está haciendo un punto sobre los espacios en blanco. El libro en realidad dice

Thus, 'Jeff'='Jeff ' is true, while 'Jeff' LIKE 'Jeff ' is false.

¡Tenga en cuenta los espacios!

Solo para dejar en claro por qué ocurrió el error, aquí está el texto:

enter image description here

Dado que el espacio está al final de la línea, es difícil de ver. Pero como digo a continuación, la comilla no pasaría a la siguiente línea si no hubiera espacio allí.

Respondido el 20 de junio de 20 a las 12:06

+1 ¡Brillante! Estaba tratando de averiguar cómo encontrar la fuente, no pensé en la búsqueda de Amazon dentro :) - mellamokb

Dios mío ... entonces se supone que debe haber un espacio. :( el espacio está al final de una línea, por lo que parece que no hay espacio. Realmente no hay espacio allí. Dice "'Jeff' LIKE 'Jeff" nueva línea "'". - Automático

Sí, está al final de una línea, lo que dificulta verlo. Un punto es que si no hubiera un espacio allí, la convención es que las comillas no pasarían a la siguiente línea. (Pero también, cuando hice una "búsqueda dentro del libro" de Amazon, los resultados de la búsqueda repitieron el texto y pude ver los espacios claramente. - Jacob Mattison

MySQL no estaría de acuerdo con su libro (no estoy seguro de otros DBMS):

mysql> SELECT 'Jeff' LIKE 'Jeff';
+--------------------+
| 'Jeff' LIKE 'Jeff' |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

contestado el 16 de mayo de 11 a las 22:05

Dice que el libro usa SQL: 1999, tal vez ese era el estándar en ese entonces: p Gracias :) - Automático

MSSQL tampoco está de acuerdo con el libro. Sospecho que el libro fue malinterpretado. - Rex Morgan

No puedo aceptar la respuesta durante otros 6 minutos: p Love stackoverflow <3 - Automático

Sí, en el libro, el ejemplo tiene un espacio. - Jacob Mattison

No estoy seguro de por qué diría eso: 'Jeff' como 'Jeff' es exactamente cierto. En cuyo caso, devolverá TODAS las filas de 'dondequiera'

En su segunda declaración, solo devolverá filas donde la columna 'nombre' es exactamente 'Jeff'. Si es 'Jeff algo', no volverá. Si desea devolver algo así, entonces debe hacer algo como 'w.name como' Jeff% '. Hay muchas más variaciones de esto, que estoy seguro de que descubrirás a medida que leas más ...

contestado el 16 de mayo de 11 a las 22:05

Podría depender de la implementación del DBMS, pero si ejecuta "seleccione 'jeff' como 'jeff';" de MySQL devuelve "1" (también conocido como verdadero).

contestado el 16 de mayo de 11 a las 22:05

Totalmente falso. La siguiente declaración devuelve 'Y' (porque la condición se evalúa como verdadera:

select 'Y' where 'Jeff' LIKE 'Jeff'

... mientras que esta declaración no devuelve filas (porque se evalúa como falsa):

select 'Y' where 'Jeff' LIKE 'John'

No sé qué estaban pensando estos autores, pero las comparaciones LIKE sin comodines son perfectamente aceptables; los lados izquierdo y derecho se comparan semánticamente para una igualdad exacta.

contestado el 16 de mayo de 11 a las 23:05

Esa sección del libro se ocupa de los espacios en blanco. Están diciendo que, en sql,

'Jeff' = 'Jeff' (tenga en cuenta el espacio extra) da como resultado VERDADERO pero

'Jeff' COMO 'Jeff' (de nuevo, con el espacio extra) resulta en FALSO

Espero que eso aclare las cosas.

contestado el 16 de mayo de 11 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.