vacio - restricciones en sql ejemplos
MySQL, ¿fusiona el equivalente de los valores vacíos? (4)
Sé que la fusión devolverá el primer valor no nulo que se le pase. ¿Hay algo similar que devuelva el primer valor no vacío / no falso?
ejemplo:
select FunctionIWant(0,'''',''banana'') as fruit; //returns banana.
Esto funcionó para mí:
SELECT IF(myValue > 0, myValue, ''empty string'') AS Value FROM myTable;
No existe tal función en MySQL, pero puede desarrollar su propia función almacenada. La principal dificultad aquí es que la cantidad de parámetros para pasar a la función puede variar.
Una posible solución podría ser pasar una cadena con un conjunto de valores separados por un separador utilizando la función CONCAT_WS
(ver la función CONCAT_WS () ). También debería definir un delimitador de cadena en caso de que su separador se incluya en uno de los valores del conjunto.
Aquí hay un script de ejemplo:
DELIMITER |; CREATE FUNCTION MY_COALESCE ( p_set_string TEXT ,p_delimiter CHAR(1) ) RETURNS TEXT DETERMINISTIC BEGIN RETURN SUBSTRING_INDEX(SUBSTRING_INDEX( REPLACE(REPLACE( CONCAT(p_delimiter,p_set_string,p_delimiter) ,CONCAT(p_delimiter,''0'',p_delimiter),'''') ,CONCAT(p_delimiter,p_delimiter),'''') ,p_delimiter,2),p_delimiter,-1) ; END; |; DELIMITER ; SET @separator='','', @delimiter=''$''; SELECT MY_COALESCE( CONCAT_WS(CONCAT(@delimiter,@separator,@delimiter),0,'''',''banana'') ,@delimiter ) as fruit ;
Cuando ejecuta el script anterior, obtiene el siguiente resultado:
MySQL> -------------- MySQL> SET @separator='','', @delimiter=''$'' MySQL> -------------- MySQL> MySQL> Query OK, 0 rows affected (0.00 sec) MySQL> MySQL> -------------- MySQL> SELECT MySQL> MY_COALESCE( MySQL> CONCAT_WS(CONCAT(@delimiter,@separator,@delimiter),0,'''',''banana'') MySQL> ,@delimiter MySQL> ) as fruit MySQL> -------------- MySQL> MySQL> +--------+ MySQL> | fruit | MySQL> +--------+ MySQL> | banana | MySQL> +--------+ MySQL> 1 row in set (0.02 sec)
Por supuesto, puede adaptar el valor del delimitador de cadena para que no exista ningún conflicto con sus valores establecidos.
Puede hacer que NULL sea una cadena vacía en MySQL:
SELECT coalesce(NULLIF(email, ''''), ''[email protected]'') FROM users WHERE id=1000000;
Use la declaración / expresión ANSI CASE :
SELECT CASE
WHEN LENGTH(col) = 0 OR col IS NULL THEN ''banana''
ELSE col
END AS fruit
No hay booleano en SQL o MySQL. MySQL realmente almacena el valor como INT, valores cero o uno:
SELECT CASE
WHEN col = 0 THEN ''banana''
ELSE col
END AS fruit