viernes, 17 de diciembre de 2010

PadLeft en SQL SERVER

Desafortunadamente SQL SERVER 2008 y versiones anteriores no tiene esta función por lo que podríamos crear una consulta de la sig forma

SELECT ISNULL(REPLICATE('0', 5 - len(ISNULL('2' ,0))), '') + '2'

La cual regresaría 00002

¿Cómo Funciona?
La función replicate duplica un carácter el número de veces que le indiquemos,
aplicamos la fórmula para determinar el tamaño de la replicación, esto sería
replicacion=longitud total del campo-longitud actual de la cadena de caracteres
una vez que obetenemos la replicación simplemente sumamos la cadena de carácteres

Ahora si se ocupa muchas veces podríamos hacer una función

CREATE FUNCTION [dbo].[PadLeft]
(@Secuencia varchar(16),
@caracter char(1),
@longitud int
)
RETURNS varchar(16) AS
BEGIN
DECLARE @curSeq varchar(16)
SELECT @curSeq = ISNULL(REPLICATE(@caracter, @longitud - len(ISNULL(@Secuencia ,0))), '') + @Secuencia
RETURN @curSeq
END

La podemos probar de la sig. forma

SELECT dbo.PadLeft('9','0',5)
SELECT dbo.PadLeft('10','0',5)

--Util para manejo de folios

Diferencias CHAR,VARCHAR Y TEXT en MYSQL

La mayoría de veces que trabajamos con cadenas en MYSQL no nos ponemos a pensar cuando utilizar uno u otro tipo de dato, pues bueno aquí les van las diferencias más básicas.

El tipo char se debe de usar para cadenas con un tamaño fijo: por ejemplo folios, claves, matrículas.
Que es lo que pasa  si por ejemplo declaro un char de 5 y solo ocupo 2 espacios, pues el manejador de base de datos lo rellena por lo que se podría decir que 3 espacios quedan desperdiciados

El tipo varchar se debe usar para cadenas cuyo tamaño es variable.

La principal diferencia entre el tipo text y varchar es que el tipo text no acepta valores default o predeterminados.

Consideremos que una de las mejores prácticas es tratar siempre de trabajar con valores NO NULOS, ya que el manejador de base de datos tiene que hacer un proceso especial para trabajar con estos valores, aparte te ahorras tiempo quitandote la validacion  IFNULL equivalente a ISNULL en sql server