Int/Int = Int

3 03 2008

Supongamos que estamos haciendo un cubo de recursos humanos para medir el % de inasistencias en la empresa e implementar algún programa para disminuirla. Tenemos entonces:

Head Count. Número de personas en la empresa. Como no puedo tener trabajando media persona, ni 0.25 personas; entonces definimos la columna que almacenará la información como entero (INT).

Inasistencias. Las veces que una persona ha faltado a trabajar. O falta o no falta. No podemos tener media inasistencia o cuarto de inasistencia. Definimos también la columna como entero (INT)

Listo, la llenamos con información y hacer el indicador calculado % de inasistencias da como resultado siempre cero. Por ejemplo, con 20 inasistencias para 100 empleados el resultado es cero.

% Inasistencias = Inasistencias/Headcount = 20/100 = 0 %

¿por qué? Todo esto gracias a la regla que dice que en las bases de datos un int dividido entre otro int dá como resultado un int. Habría que ponerle un cast o convert a la fórmula para que no marcara error. La otra es multiplicar uno de ellos por 1.0 para convertirlo a un # decimal.

Así que si el resultado no dá cero o uno, ya sabe donde está el problema.

About these ads




Cambiando las columnas CHAR a VARCHAR

2 01 2008

Pedro Sánchez nos muestra como cambiar el tipo de dato de las columnas CHAR a VARCHAR. Está para SQLServer ¿quién se anima para Oracle?

Se han fijado cuantos problemas se solucionan con convertir los tipos de datos char a varchar y quitarle los espacios al final? Algunos problema son que no filtra correctamente, no agrupa correctamente en las tablas, etc. Esto se debe en la gran mayoría de los casos a que por ejemplo se tiene la clave “A” y también la clave “A    “  (con espacios al final). El  usuario no ve la diferencia, pero por dentro si son distintas

Para solucionar esos problemas, en la base de datos del DWH Ejecuta este select :

 
select 
'Alter table '+ 
rtrim(sysobjects.name)+ 
' ALTER COLUMN ' + 
rtrim(syscolumns.name)+' 
varchar(' + cast ( syscolumns.length as varchar(5)) + ') 
go '  
 from 
syscolumns, sysobjects
where sysobjects.type = 'U' 
and  syscolumns.xtype = 175
and syscolumns.Id = sysobjects.Id
union
select 
'Update '+ 
rtrim(sysobjects.name)+ 
' SET ' + 
rtrim(syscolumns.name)+' = 
rtrim(ltrim(' + rtrim(syscolumns.name) + '))
go '  
 from 
syscolumns, sysobjects
where sysobjects.type = 'U' 
and  syscolumns.xtype = 175
and syscolumns.Id = sysobjects.Id
order by 1
  • Ejecuta los selects que están en el correo; esto te arrojara como resultado una serie de Alters y Updates
  • Selecciona todo el resultado
  • Copia el resultado

CharToVarchar1

  • Pega todos los Alter y updates copiados en el paso 3 en el área de ejecución

CharToVarchar2

  • Ejecuta

CharToVarchar3

Esto te hará unos Alter para cambiar las columnas Char a Varchar y les hará un trim para quitarle los espacios








Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 31 seguidores