Prácticas funciones de manejo de fechas en SQL Server

Logo SQL ServerMuchos de nosotros durante el ejercicio de nuestra querida profesión, nos habremos encontrado gestionando bases de datos SQL con el sistema SQL Server de Microsoft.

Siendo uno de los sistemas de bases de datos mas ampliamente usados, en sus ultimas versiones carece de funciones que simplifiquen el acceso a tipos de datos específicos.

Hoy por ejemplo, me gustaria centrarme en funciones que nos facilitan el manejo del tipo de datos DATETIME.

Para tener acceso a la funcionalidad propuesta deberemos ejecutar el siguiente código SQL dentro de la base de datos que queramos que adquiera estas funciones.

Devolver un tipo de datos DATETIME formado por el año, mes y dia pasados por parámetro:

  1. CREATE FUNCTION [dbo].[Date](@Year int, @Month int, @Day int)
  2. returns datetime
  3. as
  4. begin
  5. return dateadd(day, @Day-1, dateadd(month, @Month-1, dateadd(year, (@Year-1900),0)))
  6. end
  7. go
  8.  

Eliminar la hora de la fecha @DateTime y la devuelve solo con la fecha:

  1. CREATE FUNCTION [dbo].[DateOnly](@DateTime DateTime)
  2. returns datetime
  3. as
  4. begin
  5. return dateadd(dd,0, datediff(dd,0,@DateTime))
  6. end
  7. go

Devolver un DATETIME completo, incluyendo la hora, minuto y segundo pasados por parametro:

  1. CREATE FUNCTION [dbo].[DateTime](@Year int, @Month int, @Day int, @Hour int, @Minute int, @Second int)
  2. returns datetime
  3. as
  4. begin
  5. return dbo.Date(@Year,@Month,@Day) + dbo.Time(@Hour, @Minute,@Second)
  6. end
  7. go

Devolver un DATETIME con la Hora, Minuto y Segundo pasados por parámetro, tomando como Fecha Base el dia (1/1/1900):

  1. CREATE FUNCTION [dbo].[Time](@Hour int, @Minute int, @Second int)
  2. returns datetime
  3. as
  4. begin
  5. return dateadd(hour, @Hour, 0) + dateadd(minute, @Minute,0) + dateAdd(second, @Second,0)
  6. end
  7. go

Devolver solamente la parte Hora,Minuto y Segundo de la fecha pasada por parámetro, tomando como base la fecha (1/1/1900):

  1. CREATE FUNCTION [dbo].[TimeOnly](@DateTime DateTime)
  2. returns datetime
  3. as
  4. begin
  5. return @DateTime - dbo.DateOnly(@DateTime)
  6. end
  7. go

8 Respuestas a “Prácticas funciones de manejo de fechas en SQL Server”


  1. 1 danny

    me parece muy interesante el problema es que soy novato y no se en que parte debo poner esta funcion o donde tengo que llamarala para que fncionen ayudenme si gracias

  2. 2 David García

    Estos scripts los has de ejecutar en la base de datos que utilices, o bien, si tienes acceso a la “master”.

    Una vez ejecutados los scripts ya podrás utilizar las funciones llamandolas así, por ejemplo:

    SELECT dbo.Date( 2008, 3, 9 )

  3. 3 principiante

    apenas empiezo al involucrarme a esto pero necesito que alguien me recomiende un libro o una pagina web para buscar

    gracias

  4. 4 caterin

    no entendi nada

  5. 5 GBAVTE

    gracias me sirvio realmente

  6. 6 alberto

    no me funciona, o no comprendi bien, obtengo un error:

    [Mircosoft][ODBC SQL Server Driver][SQL Server]Línea 1:sintaxis incorrecta cerca de ‘go’

  7. 7 FElix

    Nde tavyron porque no pusiste uno que devuelva en dias la diferencia de dos fechasdistintas .i.

  8. 8 maxweed

    necesito que me ayuden
    quiero quitar la hora de datatime y agregarla en las tablas de sql como nvarchar(50)
    ALTER PROCEDURE guardar_recibo

    @id_alum_servic int=null,
    @area nvarchar(50),
    @monto float,
    @descuento nvarchar(50),
    @fecha DateTime,
    @tipo_pago nvarchar(50),
    @no_cheque nvarchar(50),

    @id_alumno nvarchar(50),
    @nombre nvarchar(50),
    @nombre2 nvarchar(50),
    @apellido nvarchar(50),
    @apellido2 nvarchar(50),

    @servicio nvarchar(50),
    @roc nvarchar(50),
    @valor nvarchar(50),
    @id_servicio int=0

    AS

    begin

    /*set @fecha = convert(dateadd(dd,0, datediff(dd,0,@fecha)),(Nvarchar(50),@fecha,101)*/

    SET @fecha = convert(DATETIME, convert (Nvarchar (50),(dateadd(dd,0,( datediff(dd,0,@fecha))))))

    set @id_alum_servic =( select id_alum_servic=count(id_alum_servic)from empl_alum_servi)

    if(@id_alum_servic=0)

    set @id_alum_servic = 1

    else

    set @id_alum_servic = (select id_alum_servic=max(id_alum_servic)+1 from empl_alum_servi)

    set @id_servicio=((select id_servicio from servic where servicio=@servicio )+ CONVERT(int, @id_servicio))

    insert into alumno (id_alumno,nombre,nombre2,apellido,apellido2)
    values(@id_alumno,@nombre,@nombre2,@apellido,@apellido2)

    insert into empl_alum_servi(id_alum_servic,id_alumno,id_servicio,area,roc,fecha,tipo_pago,no_cheque,monto,descuento)
    values(@id_alum_servic,@id_alumno,@id_servicio,@area,@roc,@fecha,@tipo_pago,@no_cheque,@monto,@descuento)

    end

  1. 1 XperimentoS » Archivo del Blog » Funciones básicas para el manejo de fechas en SQL Server
    Dirección Pingback a 21 Feb., 2008, 11:30

Añade un Comentario