En este artículo, veremos cómo evitar el error «dividir por cero» en SQL. Si dividimos cualquier número por cero, nos lleva al infinito y obtenemos un mensaje de error. Podemos evitar este mensaje de error usando los siguientes tres métodos:
- Usando la función NULLIF()
- Usando la declaración CASE
- Uso de DESACTIVAR ARITHABORT
Primero crearemos una base de datos para realizar operaciones SQL.
Consulta:
CREATE DATABASE Test;
Producción:
Los comandos completados con éxito muestran que se ha creado la base de datos «Prueba».
Para todos los métodos necesitamos declarar dos variables que almacenarán los valores del numerador y el denominador.
DECLARE @Num1 INT; DECLARE @Num2 INT;
Después de declarar la variable tenemos que establecer los valores. Establezca el valor de la segunda variable en cero.
SET @Num1=12; SET @Num2=0;
Método 1: Usar la función NULLIF()
Si ambos argumentos son iguales, devuelve NULL. Si ambos argumentos no son iguales, devuelve el valor del primer argumento.
Sintaxis:
NULLIF(exp1, exp2);
Ahora estamos usando la función NULLIF() en el denominador con el valor del segundo argumento cero.
SELECT @Num1/NULLIF(@Num2,0) AS Division;
- En el servidor SQL, si dividimos cualquier número con un valor NULL, su salida será NULL.
- Si el primer argumento es cero, significa que si el valor Num2 es cero, entonces la función NULLIF() devuelve el valor NULL.
- Si el primer argumento no es cero, la función NULLIF() devuelve el valor de ese argumento. Y la división se lleva a cabo con normalidad.
Aquí está la consulta completa.
Consulta:
DECLARE @Num1 INT; DECLARE @Num2 INT; SET @Num1=12; SET @Num2=0; SELECT @Num1/NULLIF(@Num2,0) AS Division;
Producción:
Método 2: Usando la instrucción CASE
La declaración SQL CASE se usa para verificar la condición y devolver un valor. Comprueba las condiciones hasta que sea verdadera y, si ninguna condición es verdadera, devuelve el valor en la parte else.
Tenemos que comprobar el valor del denominador, es decir, el valor de la variable Num2. Si es cero, devuelve NULL; de lo contrario, devuelve la división regular.
SELECT CASE WHEN @Num2=0 THEN NULL ELSE @Num1/@Num2 END AS Division;
Aquí está la consulta completa:
Consulta:
DECLARE @Num1 INT; DECLARE @Num2 INT; SET @Num1=12; SET @Num2=0; SELECT CASE WHEN @Num2=0 THEN NULL ELSE @Num1/@Num2 END AS Division;
Producción:
Método 3: DESACTIVAR ARITHABORT
Para controlar el comportamiento de las consultas, podemos usar métodos SET. De forma predeterminada, ARITHABORT está activado. Termina la consulta y devuelve un mensaje de error. Si lo desactivamos, terminará y devolverá un valor NULL.
Al igual que ARITHBORT, debemos configurar ANSI_WARNINGS OFF para evitar el mensaje de error.
SET ARITHABORT OFF; SET ANSI_WARNINGS OFF;
Aquí está la consulta completa:
Consulta:
SET ARITHABORT OFF; SET ANSI_WARNINGS OFF; DECLARE @Num1 INT; DECLARE @Num2 INT; SET @Num1=12; SET @Num2=0; Select @num1/@Num2;
Producción:
Publicación traducida automáticamente
Artículo escrito por snehalchitnis1851 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA