sql - todas - select por numero de columna
MySQL selecciona donde la columna no está vacía (10)
En MySQL, ¿puedo seleccionar columnas solo donde algo existe?
Por ejemplo, tengo la siguiente consulta:
select phone, phone2
from jewishyellow.users
where phone like ''813%''
and phone2
Intento seleccionar solo las filas donde el teléfono comienza con 813 y el teléfono 2 tiene algo.
Compare el valor de phone2
con una cadena vacía:
select phone, phone2
from jewishyellow.users
where phone like ''813%'' and phone2<>''''
Tenga en cuenta que el valor NULL
se interpreta como false
.
Compruebe valores de cadena NULL
y vacíos:
select phone
, phone2
from users
where phone like ''813%''
and trim(coalesce(phone2, '''')) <>''''
NB Creo que COALESCE () es un estándar SQL (-ish), mientras que ISNULL () no lo es.
Para verificar si el campo es IS NULL
, IS NOT NULL
operadores IS NULL
, IS NOT NULL
.
Referencia de MySql http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
Podemos usar CASE para establecer un valor en blanco a alguna char o String. Estoy usando NA como cadena predeterminada.
SELECT phone,
CASE WHEN phone2 = '''' THEN ''NA'' END AS phone2 ELSE ISNULL(phone2,0)
FROM jewishyellow.users WHERE phone LIKE ''813%''
Puede usar el comodín del operador para lograr esto:
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE ''813%''
AND t.phone2 like ''[0-9]'';
de esta forma, puedes obtener todos los teléfonos2 que tengan un prefijo numérico.
Si hay espacios en el campo phone2 desde la entrada de datos involuntarios, puede ignorar esos registros con las funciones IFNULL y TRIM:
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone LIKE ''813%''
AND TRIM(IFNULL(phone2,'''')) <> '''';
Una respuesta que he estado usando que me ha funcionado bastante bien, que ya no veía aquí (esta pregunta es muy antigua, entonces puede que no haya funcionado) es en realidad
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE ''813%''
AND t.phone2 > ''''
Observe la parte > ''''
, que verificará si el valor no es nulo, y si el valor no es solo un espacio en blanco o en blanco.
Básicamente, si el campo tiene algo aparte de espacios en blanco o NULL
, es cierto. También es súper corto, por lo que es fácil de escribir, y otra ventaja sobre las COALESCE()
e IFNULL()
es que es IFNULL()
índice, ya que no comparas el resultado de una función en un campo con nada.
Casos de prueba:
SELECT if(NULL > '''',''true'',''false'');-- false
SELECT if('''' > '''',''true'',''false'');-- false
SELECT if('' '' > '''',''true'',''false'');-- false
SELECT if(''/n'' > '''',''true'',''false'');-- false
SELECT if(''/t'' > '''',''true'',''false'');-- false
SELECT if(''Yeet'' > '''',''true'',''false'');-- true
Utilizar:
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE ''813%''
AND t.phone2 IS NOT NULL
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone like ''813%'' and (phone2 <> "");
Puede necesitar algunos retoques dependiendo de cuál sea su valor predeterminado. Si permitiste el llenado nulo, entonces puedes hacer "No NULO" en su lugar, lo cual es obviamente mejor.
select phone, phone2 from jewishyellow.users
where phone like ''813%'' and phone2 is not null