Filtrar los NULL en SQL Server

Hoy veremos como trabajar con los NULL

Como siempre con un pequeño ejemplo acompañado de su código y sus capturas veremos como trabajar con campos con valores “NULL”

Creando una tabla de ejemplo

Resultado del script

Esto nos creará una tabla con la siguiente información:

trabajando con NULL en SQL Server

Filtrando de manera correcta los NULLs

Este pequeño ejemplo demuestra como filtrar los NULL mediante el operador IS

filtando valores NULL en SQL ServerEl segundo ejemplo es como debemos filtrar los campos con valores NULL

Para terminar con el ejemplo, si tuviésemos que buscar los registros cuyo columna ZONA no contiene valores nulos (NOT NULL). Para ello podríamos realizar lo siguiente:

 

Realizar backup con TSQL

Realizar backup de tus bases con TSQL en MS SQL Server

Hoy veremos una manera simple de realizar un respaldo de todas nuestras bases de datos mediante un pequeño script.

Script para Backup

Resultado de correr el script

realizar backup con tsqlQue sigue…

Se puede optimizar el script para agregar nuevas opciones de backups, como así también programar el mismo.

Calcular el CUIL

Un poco de historia del CUIL – CUIT

Que es el DNI

(Según el Registro Nacional de Personas – RENAPER…)
El DNI es el Documento Nacional de Identidad que certifica en forma exclusiva la identidad de las personas, a partir de la base de datos que administra el Registro Nacional de las Personas. El DNI es el único instrumento que acredita la identidad de una persona.

¿Es único el DNI?

Explícitamente en ningún lado indica que es único, pero todos creemos que así lo es.
Luego de haber trabajado con bases de datos de la Argentina, me di cuenta que esto no es tan así.
Encontré una gran cantidad de personas que tienen su DNI duplicado. Es decir que hay dos personas en la Argentina con el mismo número.
Puede ser un poco complicado de entender al principio, pero tuve la suerte y/o la coincidencia de tener un compañero cercano con este “problema”. Su número de DNI era el mismo que de una chica. Gracias a él empecé a investigar y descubrí que es algo común (si es que se puede llamar así).

No es único el DNI

Aparentemente el ReNaPer debido a algún error entrego números duplicados.
La explicación más lógica: la distribución de los números depende de personas.. Y donde existe una persona… existe la posibilidad de equivocación…

Y nació el CUIL

Es por ello que (entre otros motivos)… para facilitar el trabajo de organismos oficiales (ANSES, AFIP), surgió el identificador del CUIL (Código Único de Identificación Laboral) – CUIT (Código único de Identificación Tributaría). :D

De esta manera, por más que hubiese un DNI duplicado el CUIL los diferenciaría, y no habría mas problemas…
Para ello se inventó un Algoritmo para calcular dicho número (CUIL-CUIT – Son los mismos números).

Generando el CUIL CUIT

CUIL / CUIT
CUIL/T: Son 11 números en total:
XY – 12345678 – Z
XY: Indican el tipo (Masculino, Femenino o una empresa)
12345678: Número de DNI
Z: Código Verificador

Algoritmo:
Se determina XY con las siguientes reglas
Masculino:20
Femenio:27
Empresa:30

Se multiplica XY 12345678 por un número de forma separada:

X * 5
Y * 4
1 * 3
2 * 2
3 * 7
4 * 6
5 * 5
6 * 4
7 * 3
8 * 2

Se suman dichos resultados. El resultado obtenido se divide por 11. De esa división se obtiene un Resto que determina Z
Si el resto es 0= Entoces Z=0 Si el resto es 1= Entonces se aplica la siguiente regla:
*Si es hombre: Z=9 y XY pasa a ser 23 *Si es mujer: Z=4 y XY pasa a ser 23
Caso contrario XY pasa a ser (11- Resto).

Ejemplo de Cálculo de CUIL CUIT:

Masculino DNI 12 345 678

1-Determinar el Tipo
XY es 20
Hacemos el cálculo
2 * 5=10
0 * 4=0
1 * 3=3
2 * 2=4
3 * 7=21
4 * 6=24
5 * 5=25
6 * 4=24
7 * 3=21
8 * 2=16
Realizamos la suma de (10+0+3+4+21+24+25+24+21+16)= 148
Dividimos por 11 para obtener Z (el código verificador
148/11=13,4545—>13 (Redondeo)
Obtenemos el resto de la división
148 – (13*11)=5
Determinamos Z
11-5= 6

Conclusión: CUIL-CUIT
20-12345678-6

Básicamente esta es la regla por la cuál se debería determinar el número de CUIL/T….
Y repito debería pues si bien lo genera este algoritmo, el impulsor del mismo es una persona. Es por ello que existen personas con número de CUIL que no se ajustan a esta reglas (o si en cierta manera).

Los errores más comunes son:

Por ejemplo a: 12345678
Se equivocan de sexo ( En ves de masculino le colocan F a la hora del cálculo)
Resultado: 27-12345678 – 0
Se equivocaron de número en el DNI
Resultado: 20 – 12346788 – 5
Y otras cosas extrañas que vi…

Aplicación para calcular y generar contancia

Para el cálculo del cuil y cuit puede ser de utilidad las siguientes aplicaciones:

Esta APP es para Android  y permite generar e imprimir la constancia:

https://play.google.com/store/apps/details?id=com.maurobernal.cuil&hl=es_419

Esta APP es para Windows con .NET Framework, y permite generar e imprimir la constancia:

http://maurobernal.com.ar/cuil/cuil.zip

Crear indices faltantes

Como buscar y crear índices faltantes en nuestra base de datos

Navegando por la web me tope con esta conjunto de scripts recomendado por Microsoft que aseguran ser útil para cualquier DBA

https://gallery.technet.microsoft.com/Some-random-collection-of-b607bf1b

Como siempre son para MS SQL Server.

Entre ellos encontré uno muy útil que analiza las estadísticas de una base en producción y trate de generarte el TSQL para crear los índices recomendados faltantes

Veamos el código

Resultado de correr el script

Luego de unos segundos veremos algo de este estilo:

buscando indices faltantes con tsqlPodremos ver el tiempo promedio estimado de mejora al realizar el índice, como el TSQL para crearlo.

(*) Un error que tiene el script es el nombre del índice que genera, que no debe superar los 128 caracteres, y en el mismo no lo contempla.

Por lo demás promete cumplir lo que ofrece….

Actualmente lo estoy probando en mis bases de producción como alternativa a la herramienta de análisis de rendimiento de MS SQL Server

Obtener el ultimo día del mes con SQL Server

Como obtener el último día del mes con TSQL en SQL Server

Anteriormente habíamos visto como podíamos obtener:

Primer y último día de Mes Anterior, Actual y Siguiente.

Si te interesa ( y trabajas con una versión anterior a MS SQL Server 2012), les dejo el tutorial anterior:

https://maurobernal.com.ar/blog/t-sql/primer-y-ultimo-dia-del-mes-con-sql-server-y-otros/

Pero en esta oportunidad veremos otra variante para obtener el último día del mes: actual, mes anterior y mes siguiente.

Usando la funtión EOMONTH()

A partir de Microsoft SQL Server 2012 se agregó la función EOMONTH()

https://docs.microsoft.com/en-us/sql/t-sql/functions/eomonth-transact-sql

La misma permite obtener el último día del mes

Veamos un ejemplo:

Esto nos dará como resultado:

usando_eomonth_ejemploCon un poco de ingenio podemos obtener un poco más

A partir del código anterior, con un poco de ingenio, y con ayuda de la función DateAdd()

https://docs.microsoft.com/en-us/sql/t-sql/functions/dateadd-transact-sql

Si le agregamos un día podemos obtener el primer día del mes anterior, mes actual y mes próximo

El resultado sería el siguiente:

eomoth para primer dia del mes

 

No se olviden de comentar si les sirvió, !!! Y cualquier cosa que necesiten hacer es posible con un poco de paciencia…

Tutorial Rank y Dense_Rank

Aprende a usar Rank() y Dense_Rank()

Vamos primero con la documentación de estas dos funciones:

Rank:

https://docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql

Dense_Rank

https://docs.microsoft.com/en-us/sql/t-sql/functions/dense-rank-transact-sql

 

Entendiendo con un ejemplo

Primero crearemos un pequeña base de datos, que incluye un listado de vendedores, con sus ventas

 

Contenido de esta tabla

Esta tabla desordenada contiene el listado de vendedores, con sus respectivas Ventas

Base para ejemplo de Dense Rank

Uso de Rank y Dense_Rank para armar ranking

La idea de estas dos funciones es armar un ranking.

Semejanza: Ambas, en el caso de que empaten le ponen el mismo número de ranking

Diferencia: Al caso siguiente luego del empate Rank no le pone el inmediato superior, si no que mantiene la cuenta de la cantidad de elementos que lleva hasta el momento y le pone el siguiente. A diferencia de Dense_Rank que continúa con el siguiente correlativo al del empate

 

Con Rank

Uso de Rank

Con Dense_Rank

Uso de dense_rankts

Eliminar Repetidos con TSQL

Eliminar Repetidos con TSQL y la función Row_Number()

Hoy vamos usar row_number(), una subconsulta, comando IN para buscar y eliminar registros repetidos.

En esta nueva etapa me he propuesto compartir cada uno de los scripts que siempre son de utilidad cuando se trabaja con bases de datos.

Como siempre son con TSQL para MS SQL Server.

Esta vez veremos como eliminar registros repetidos de una tabla, solo dejando 1 registro.

El secreto está en el uso del comando ROW_NUMBER

https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql

 

Cargaremos una tabla de ejemplo MYTABLA

 

Esta pequeña tabla de ejemplo tiene la siguiente estructura:

eliminar repetidos con tsql

Buscando repetidos

Lo primero que haremos es buscar los que tienen el campo DOCUMENTO repetido usando la función Row_Number(). Esta nos devolverá un nuevo campo que llamaremos ORDEN, e indicara las veces que se repite un campo

eliminar repetidos con tsql y row_number()

PARTITION BY Documento le indicamos que la partición sea el campo documento

ORDER BY myTableID le indicamos el criterio para enumerar. Es decir en orden ascendente por ID del campo. Si tuviésemos un campo de tipo fecha (Datetime) podríamos ordenar por mas nuevo, o viceversa

 

Buscando los repetidos

Lo primero que haremos es buscar los repetidos usando una subconsulta

Eliminiar repetidos TSQL 31 repetidosEsta consulta devuelve los ID de los repetidos: 31 registros para ser mas especificos

Eliminado los repetidos

Ahora los eliminamos usando el comando IN

 

 

 

Espero que les haya sido útil.

 

El comando Row_Number() permite trabajar con los registros de forma masiva pudiendo identificar la N aparición.

Mas adelante veremos como eliminar / actualizar:

-El último registro de una serie de registros

-El primero, etc…

 

 

 

 

Validar CBU Argentina

Validar – CBU Número de Cuenta – Argentina

Siguiendo con estas funciones de TSQL para MS SQL Server, en esta ocasión es para validar los 22 dígitos del CBU.

La Clave Bancaria Uniforme (CBU) se compone de 22 dígitos

https://es.wikipedia.org/wiki/Clave_Bancaria_Uniforme

CBU Clave Bancaria Uniforme

 

 

Validar Tarjeta de Credito con TSQL

Validar Número de Tarjeta de Crédito
La mayoría de los sellos de tarjetas de crédito (Visa, Master, Dinners,etc) usan el algoritmo de Luhn, el cúal mediante un digito verificador corrobora si el resto de los números son correctos
https://es.wikipedia.org/wiki/Algoritmo_de_Luhn

Existen diferentes formas de implementar el algoritmo.
En esta ocasión les comparto el script de Derek Colley

Veamos la función para validar con TSQL

 

 

Para probar:

 

Fuente:

https://www.mssqltips.com/sqlservertip/3319/implementing-luhns-algorithm-in-tsql-to-validate-credit-card-numbers/

Validar tarjeta de credito con tsql