Las operaciones de comparación dan un valor de
1
(CIERTO), 0
(FALSO), o
NULL
. Estas operaciones funcionan tanto para
números como para cadenas de caracteres. Las cadenas de
caracteres se convierten automáticamente en números y los
números en cadenas cuando es necesario.
Algunas de las funciones de esta sección (tales como
LEAST()
y GREATEST()
)
retornan valores distintos a 1
(CIERTO),
0
(FALSO), o NULL
. Sin
embargo, el valor que retornan se basa en operaciones de
comparación realizadas como describen las siguientes reglas.
MySQL compara valores usando las siguientes reglas:
Si uno o ambos argumentos son NULL
, el
resultado de la comparación es NULL
,
excepto para el operador de comparación
NULL
-safe <=>
.
Si ambos argumentos en una operación de comparación son cadenas, se comparan como cadenas.
Si ambos argumentos son enteros, se comparan como enteros.
Los valores hexadecimales se tratan como cadenas binarias si no se comparan con un número.
Si uno de los argumentos es una columna
TIMESTAMP
o DATETIME
y
el otro argumento es una constante, la constante se
convierte en timestamp antes de realizar la comparación.
Esto se hace para acercarse al comportamiento de ODBC. Esto
no se hace para argumentos en IN()
! Para
estar seguro, siempre use cadenas completas de fechas/horas
al hacer comparaciones.
En todos los otros casos, los argumentos se comparan como números con punto flotante (reales).
Por defecto, la comparación de cadenas no es sensible a mayúsculas y usa el conjunto de caracteres actual (ISO-8859-1 Latin1 por defecto, que siempre funciona bien para inglés).
Par convertir un valor a un tipo específico para una
comparación, puede usar la función CAST()
.
Los valores de cadenas de caracteres pueden convertirse a un
conjunto de caracteres distinto usando
CONVERT()
. Consulte
Sección 12.8, “Funciones y operadores de cast”.
Los siguientes ejemplos ilustran conversión de cadenas a números para operaciones de comparación:
mysql> SELECT 1 > '6x'; -> 0 mysql> SELECT 7 > '6x'; -> 1 mysql> SELECT 0 > 'x6'; -> 0 mysql> SELECT 0 = 'x6'; -> 1
Tenga en cuanta que cuando compara una columna de cadenas de
caracteres con un número, MySQL no puede usar el índice de la
columna para buscar rápidamente le valor. Si
str_col
es una columna de cadenas
indexada, el índice no puede usarse al realizar la búsqueda en
el siguiente comando:
SELECT * FROMtbl_name
WHEREstr_col
=1;
La razón es que hay diferentes cadenas que pueden convertirse
al valor 1
: '1'
,
' 1'
, '1a'
, ...
=
Igual:
mysql> SELECT 1 = 0; -> 0 mysql> SELECT '0' = 0; -> 1 mysql> SELECT '0.0' = 0; -> 1 mysql> SELECT '0.01' = 0; -> 0 mysql> SELECT '.01' = 0.01; -> 1
<=>
NULL
-safe equal. Este operador realiza
una comparación de igualdad como el operador
=
, pero retorna 1 en lugar de
NULL
si ambos operandos son
NULL
, y 0 en lugar de
NULL
si un operando es
NULL
.
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1, 1, 0 mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL; -> 1, NULL, NULL
<>
, !=
Diferente:
mysql> SELECT '.01' <> '0.01'; -> 1 mysql> SELECT .01 <> '0.01'; -> 0 mysql> SELECT 'zapp' <> 'zappp'; -> 1
<=
Menor que o igual:
mysql> SELECT 0.1 <= 2; -> 1
<
Menor que:
mysql> SELECT 2 < 2; -> 0
>=
Mayor que o igual:
mysql> SELECT 2 >= 2; -> 1
>
Mayor que:
mysql> SELECT 2 > 2; -> 0
IS
, valor
booleano
IS NOT
valor booleano
Comprueba si un valor contra un valor booleano, donde
boolean_value
puede ser
TRUE
, FALSE
, o
UNKNOWN
.
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN; -> 1, 1, 1 mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN; -> 1, 1, 0
IS [NOT]
sintaxis se añadió en
MySQL 5.0.2.
valor
booleano
IS NULL
, IS NOT NULL
Testea si un valor es o no NULL
.
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL; -> 0, 0, 1 mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL; -> 1, 1, 0
Para poder trabajar con programas ODBC, MySQL soporta las
siguientes características extra al usar IS
NULL
:
Puede encontrar el registro que contiene el valor
AUTO_INCREMENT
más reciente
realizando un comando de la siguiente forma
inmediatamente tras generar el valor:
SELECT * FROMtbl_name
WHEREauto_col
IS NULL
Este comportamiento puede desactivarse asignando
SQL_AUTO_IS_NULL=0
. Consulte
Sección 13.5.3, “Sintaxis de SET
”.
Para columnas DATE
y
DATETIME
que se declaran como
NOT NULL
, puede encontrar la fecha
especial '0000-00-00'
con un comando
como este:
SELECT * FROMtbl_name
WHEREdate_column
IS NULL
Esto es necesario para algunas aplicaciones ODBC, ya que
ODBC no soporta un valor de fecha
'0000-00-00'
.
expr
BETWEEN
min
AND
max
Si expr
es mayor o igual que
min
y
expr
es menor o igual a
max
, BETWEEN
retorna 1
, de otro modo retorna
0
. Esto es equivalente a la expresión
(
si todos los
argumentos son del mismo tipo. De otro modo la conversión
de tipos tiene lugar según las reglas descritas al
principio de la sección, pero aplicadas a todos los
argumentos.
min
<=
expr
AND
expr
<=
max
)
mysql> SELECT 1 BETWEEN 2 AND 3; -> 0 mysql> SELECT 'b' BETWEEN 'a' AND 'c'; -> 1 mysql> SELECT 2 BETWEEN 2 AND '3'; -> 1 mysql> SELECT 2 BETWEEN 2 AND 'x-3'; -> 0
expr
NOT BETWEEN
min
AND
max
Esto es lo mismo que NOT
(
.
expr
BETWEEN
min
AND
max
)
COALESCE(
value
,...)
Retorna el primer valore no NULL
de la
lista.
mysql> SELECT COALESCE(NULL,1); -> 1 mysql> SELECT COALESCE(NULL,NULL,NULL); -> NULL
GREATEST(
value1
,value2
,...)
Con dos o más argumentos, retorna el argumento mayor (con
valor mayor). Los argumentos se comparan usando las mismas
reglas que para LEAST()
.
mysql> SELECT GREATEST(2,0); -> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); -> 767.0 mysql> SELECT GREATEST('B','A','C'); -> 'C'
expr
IN
(value
,...)
Retorna 1
si
expr
es uno de los valores en la
lista IN
, de lo contrario retorna
0
. Si todos los valores son constantes,
se evalúan según el tipo y ordenación de
expr
. La búsqueda para el
elemento se hace usando búsqueda binaria. Esto significa
que IN
es muy rápido si la lista
IN
consiste enteramente en constantes. Si
expr
es una expresión de cadenas
de caracteres sensible a mayúsculas, la comparación de
cadenas se realiza sensible a mayúsculas.
mysql> SELECT 2 IN (0,3,5,'wefwf'); -> 0 mysql> SELECT 'wefwf' IN (0,3,5,'wefwf'); -> 1
El número de valores en la lista IN
sólo está limitado por el valor
max_allowed_packet
.
En MySQL 5.0, para cumplir el estándar SQL
IN
retorna NULL
no
sólo si la expresión de la parte izquierda es
NULL
, también si no encuentra
coincidencias en la lista y una de las expresiones en la
lista es NULL
.
La sintaxis de IN()
puede usarse para
escribir algunas subconsultas. Consulte
Sección 13.2.8.3, “Subconsultas con ANY
, IN
y
SOME
”.
expr
NOT IN
(value
,...)
Esto es lo mismo que NOT
(
.
expr
IN
(value
,...))
ISNULL(
expr
)
Si expr
es
NULL
, ISNULL()
retorna
1
, sino retorna 0
.
mysql> SELECT ISNULL(1+1); -> 0 mysql> SELECT ISNULL(1/0); -> 1
Una comparación de valores NULL
usando
=
siempre es falsa.
La función ISNULL()
comparte algunos
comportamientos especiales con el operador de comparación
IS NULL
, consulte la descripción de
IS NULL
en
Sección 12.1.3, “Funciones y operadores de comparación”.
INTERVAL(
N
,N1
,N2
,N3
,...)
Retorna 0
if N
< N1
, 1
si
N
<
N2
y así o -1
si N
es NULL
.
Todos los argumentos se tratan como enteros. Esto requiere
que N1
<
N2
<
N3
< ...
< Nn
para que la función
funcione correctamente. Esto es porque se usa una búsqueda
binaria (muy rápida).
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200); -> 3 mysql> SELECT INTERVAL(10, 1, 10, 100, 1000); -> 2 mysql> SELECT INTERVAL(22, 23, 30, 44, 200); -> 0
LEAST(
value1
,value2
,...)
Con dos o más argumentos, retorna el argumento menor (con un valor menor). Los argumentos se comparan usando las siguientes reglas:
Si el valor retornado se usan en un contexto
INTEGER
o todos los argumentos son
enteros, se comparan como enteros.
Si el valor retornado se usa en un contexto
REAL
o todos los argumentos son
reales, se comparan como reales.
Si algún argumento es una cadena de caracteres sensible a mayúsculas, los argumentos se comparan como cadenas sensibles a mayúsculas.
En cualquier otro caso, los argumentos se comparan como cadenas no sensibles a mayúsculas.
mysql> SELECT LEAST(2,0); -> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> SELECT LEAST('B','A','C'); -> 'A'
Tenga en cuenta que las reglas de conversión precedentes pueden producir resultados extraños en algunos casos extremos:
mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED); -> -9223372036854775808
Esto ocurre porque MySQL lee
9223372036854775808.0
en un contexto
entero. La representación entera no es lo bastante buena
para tratar el valor, así que lo cambia a entero con signo.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.