Crearía una "función almacenada" (lo que en MSSQL se llama una función definida por el usuario):
CREATE FUNCTION isNullOrSpaces(s TEXT)
RETURNS BOOLEAN DETERMINISTIC
RETURN (IFNULL(LENGTH(TRIM(s)), 0) = 0);
select
isNullOrSpaces(null) 'null',
isNullOrSpaces('') 'empty string',
isNullOrSpaces(' ') 'spaces',
isNullOrSpaces('
') 'spaces, tab and newline';
Tenga en cuenta que el último caso, donde el valor contiene pestañas y saltos, devuelve 0 (FALSO). Esto es gracias a una mala implementación (en mi humilde opinión) de la función TRIM incorporada, que no elimina todos los espacios en blanco.
Hubiera preferido hacer la función isNullOrWhiteSpace, pero como esto es suficiente para muchos casos y una implementación de SQL puro de una función TRIM adecuada será lenta, pensé que esto funcionaría. Si necesita manejar todos los espacios en blanco, considere hacer lo que MySQL llama una función definida por el usuario (la función nativa es un nombre mejor IMO) - vea por ejemplo https://www.codeproject.com/articles/15643/mysql-user-defined-functions.
Es posible que también desee crear una versión que devuelva una cadena vacía si el argumento es NULO, está vacío o tiene espacios. Esta versión es principalmente útil para las cláusulas WHERE o HAVING de una consulta, pero la única parte difícil de hacer una que funcione igual excepto que se devuelva una cadena vacía o la cadena original es asignarle un nombre apropiado a la función ...! Algo así:
CREATE FUNCTION trimEx(s TEXT)
RETURNS TEXT DETERMINISTIC
RETURN IF(IFNULL(LENGTH(TRIM(s)), 0) = 0, '', TRIM(s));
select
trimEx(null) 'null',
trimEx('') 'empty string',
trimEx(' ') 'spaces',
trimEx(' not empty ') 'contains text';
Bueno ... de hecho, puede verificar esto en su propio MySQL ... – RollingBoy
¿Cuál cree que es esta la lógica correcta? – Efox
(CUANDO la descripción NO ES NULA ENTONCES 'no es nulo' ELSE 'algo más' END). El último 'else' nunca será alcanzado. Porque si la descripción no es nula, siempre golpea la rama 'IS NOT NULL'. – RollingBoy