Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Function para devolver la fecha en formato dd-MMM-yyyy

Estas en el tema de Function para devolver la fecha en formato dd-MMM-yyyy en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 03/01/2009, 10:11
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 9 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--
  #2 (permalink)  
Antiguo 05/01/2009, 08:38
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Respuesta: Function para devolver la fecha en formato dd-MMM-yyyy

Aunque este tipo de operaciones prefieron hacerlas en el front... (los lenguajes de programacion ya traen el soporte sin necesidad de hacer funciones extra).

Solo te falto incluir el tamano del varchar a regresar...(como no pusiste ninguno te lo toma como largo 1)

Código:
CREATE FUNCTION fn_FormatFecha (@Fecha datetime)
RETURNS varchar(23)
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
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 05/01/2009, 09:10
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 9 meses
Puntos: 7
Respuesta: Function para devolver la fecha en formato dd-MMM-yyyy

Gracias!
__________________
.::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--
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:01.