Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/01/2009, 10:11
Avatar de RsOfT
RsOfT
 
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 10 meses
Puntos: 7
Function para devolver la fecha en formato dd-MMM-yyyy

He creado una función en SQL 2005 para que me devuelva una fecha formateada como 03-Ene-2009 (dd-MMM-yyyy).

El código de la función es:

Código:
CREATE FUNCTION fn_FormatFecha (@Fecha datetime)
RETURNS varchar
AS
BEGIN
 DECLARE @Result varchar(23)
 
 Select @Result = SubString(Convert(varchar(10),@Fecha,120),9,2) + '-' + 
 Case SubString(Convert(varchar(7),@Fecha,120),6,2) When '01' Then 'Ene' When '02' Then 'Feb' When '03' Then 'Mar' When '04' Then 'Abr' When '05' Then 'May' When '06' Then 'Jun' When '07' Then 'Jul' When '08' Then 'Ago' When '09' Then 'Sep' When '10' Then 'Oct' When '11' Then 'Nov' When '12' Then 'Dic' end + '-' + 
 Convert(varchar(4),@Fecha,120) + ' ' +
 case SubString(Convert(varchar(20),@Fecha,120),12,2) 
 when '00' then '12'
 when '13' then '01'
 when '14' then '02'
 when '15' then '03'
 when '16' then '04'
 when '17' then '05'
 when '18' then '06'
 when '19' then '07'
 when '20' then '08'
 when '21' then '09'
 when '22' then '10'
 when '23' then '11'
 when '24' then '12' else 
 SubString(Convert(varchar(20),@Fecha,120),12,2) end
 + ':' + SubString(Convert(varchar(20),@Fecha,120),15,6) 
 + ' ' + case SubString(Convert(varchar(20),@Fecha,120),12,2)
 when '00' then 'AM'
 when '13' then 'PM'
 when '14' then 'PM'
 when '15' then 'PM'
 when '16' then 'PM'
 when '17' then 'PM'
 when '18' then 'PM'
 when '19' then 'PM'
 when '20' then 'PM'
 when '21' then 'PM'
 when '22' then 'PM'
 when '23' then 'PM'
 when '24' then 'PM' else 'AM' end
 
 RETURN @Result
END
Ahora bien, cuando llamo la función asi:
Código:
Select dbo.fn_FormatFecha(GetDate())
, el resultado es cero.

Sin embargo, cuando pruebo mi código me trae el resultado correcto. Para probar, utilizo el siguiente código:

Código:
 DECLARE @Result varchar(23)
 DECLARE @Fecha datetime
 
 Select @Fecha = getDate()
 
 Select @Result = SubString(Convert(varchar(10),@Fecha,120),9,2) + '-' + 
 Case SubString(Convert(varchar(7),@Fecha,120),6,2) When '01' Then 'Ene' When '02' Then 'Feb' When '03' Then 'Mar' When '04' Then 'Abr' When '05' Then 'May' When '06' Then 'Jun' When '07' Then 'Jul' When '08' Then 'Ago' When '09' Then 'Sep' When '10' Then 'Oct' When '11' Then 'Nov' When '12' Then 'Dic' end + '-' + 
 Convert(varchar(4),@Fecha,120) + ' ' +
 case SubString(Convert(varchar(20),@Fecha,120),12,2) 
 when '00' then '12'
 when '13' then '01'
 when '14' then '02'
 when '15' then '03'
 when '16' then '04'
 when '17' then '05'
 when '18' then '06'
 when '19' then '07'
 when '20' then '08'
 when '21' then '09'
 when '22' then '10'
 when '23' then '11'
 when '24' then '12' else 
 SubString(Convert(varchar(20),@Fecha,120),12,2) end
 + ':' + SubString(Convert(varchar(20),@Fecha,120),15,6) 
 + ' ' + case SubString(Convert(varchar(20),@Fecha,120),12,2)
 when '00' then 'AM'
 when '13' then 'PM'
 when '14' then 'PM'
 when '15' then 'PM'
 when '16' then 'PM'
 when '17' then 'PM'
 when '18' then 'PM'
 when '19' then 'PM'
 when '20' then 'PM'
 when '21' then 'PM'
 when '22' then 'PM'
 when '23' then 'PM'
 when '24' then 'PM' else 'AM' end
 
 Select @Result
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--