Oasis

viernes, enero 27, 2006

Upps

Ya encontre una forma mas facil para hacer lo que comentaba en el tema del REPLICATE, como dice ahi lo que necesitabamos era tomar el año y el mes de una variable tipo fecha (YYYYMM).

Sencillamente esto se resuelve asi:
convert(char(6), sInv_LoadDate, 112)

donde sInv_LoadDate es una variable tipo fecha.


Lo que nos paso fue que corrimos el query asi:
convert(char(6), '1/25/2005 10:00:00 PM', 112)

y pues nos dio este resultado: '1/25/2'

Por eso pensamos que no funcionaba, buscamos otra solucion, etc, etc .


El punto es que lo debimos hacer con la variable tipo fecha y no con la cadena.

SQL: Replicate

Hace unos dias, resolviendo un problema que traiamos en el trabajo usamos la funcion REPLICATE. Lo que pasaba era que de una fecha necesitabamos solamente el año y el mes ( YYYYMM ), esto porque el reporte era por periodos. Buenos, entonces dijimos hay que sacar el año y el mes y los concatenamos no???

Pero la funcion MONTH() regresa un int, asi que :

1) Si hacemos esto:
SELECT YEAR('1/30/2005 5:40:58 PM') + MONTH('1/30/2005 5:40:58 PM')

Lo que pasa es que nos suma 2005 + 1 = 2006 y pues claro, esto no es lo que buscamos.

2) Entonces pensamos, hay que convertirlas a char:
SELECT CAST(YEAR('1/30/2005 5:40:58 PM') AS CHAR(4)) + CAST(MONTH('1/30/2005 5:40:58 PM') AS CHAR(2))

Pero ahi nos topamos con otro problema, nos regreso '20051' debido a que la funcion MONTH() solo regreso un '1' y no un '01' como hubieramos deseado ('200501').

Entonces recorde que habia buscado una vez una funcion para ponerle ceros a la izquierda a unos cheques, pero no me acordaba ni cual era ni donde la habia usado, asi que tarde buen rato buscando hasta que la encontre.

3) Usamos el REPLICATE() para ponerle un cero a la izquierda al mes y concatenarlo:
SELECT CAST(YEAR('1/30/2005 5:40:58 PM') AS CHAR(4)) + REPLICATE('0',2-LEN(CAST(MONTH('1/30/2005 5:40:58 PM') AS CHAR(2))))+ CAST(MONTH('1/30/2005 5:40:58 PM') AS CHAR(2))

pero, porque puse ese 2- tan grandote? Ah pues porque es muy importante que lo pongamos ya que ahi estamos diciendole el tamaño de longitud de la cadena. Es que el replicate lo que hace es repetir una cadena el numero de veces que tu le digas, por lo tanto lo que hicimos fue repetir el cero 1 vez ( 2 - 1).

2-1? Si, el 2 yo lo puse y el 1 sale de la longitud del mes, osea 1. Y que pasaria con meses de 2 digitos? pues 2-LEN(MONTH('11/30/2005 5:40:58 PM')) es 2-0 = 0, y pues no pondra ningun cero y solo concatenaremos el mes de dos digitos.


Bueno el punto es que el REPLICATE() repite cadenas las veces que le digas y si necesitas ponerle ceros a la izquierda a alguna cadena pues asi lo puedes hacer.

Otro ejempo:
SELECT REPLICATE('0', 10-LEN(270)) + CAST(270 AS CHAR(10))

jueves, enero 26, 2006

Inicio

El dia de hoy me anime a crear un blog, en este voy a ir metiendo vivencias que vaya teniendo ( Dentro del area de Sistemas Computacionales ).
Hasta hace pocos dias tenia la idea que un Blog era para personas con muchisima sabiduria, gente que realmente aporta conocimientos y pues me dije "Yo que voy a aportar?", pero pues ese no es el unico proposito, esto ayuda en muchisimas cosas mas, principalmente al que los escribe.
Asi pues, aqui voy ir escribiendo algunas cosas que vaya aplicando en mi trabajo y lo que vaya aprendiendo de lecturas que vaya haciendo.