noviembre 01, 2005

InterBase - Date functions


Esta página esta muy interesante, contiene muchas funciones que se pueden usar para el manejo de fechas con Interbase/Firebird, muy útil si pensamos que se dejan de usar algunas UDF's cuando se hace uso de estas sencillas instrucciones SQL

funciones de fechas

Por ejemplo Tomando a D como la fecha en cuestion:

Dia de la semana:
EXTRACT(WEEKDAY FROM D)
regresa 0=Domingo, 1=Lunes, 2=Martes...6=Sabado

Primer dia del mes:
D - EXTRACT(DAY FROM D) + 1;

Ultimo dia del mes:
D - EXTRACT(DAY FROM D) + 32 - EXTRACT(DAY FROM D - EXTRACT(DAY FROM D) + 32)

Primer dia del siguiente mes:
D - EXTRACT(DAY FROM D) + 33 - EXTRACT(DAY FROM D - EXTRACT(DAY FROM D) + 32)

Número de dias del mes:
EXTRACT(DAY FROM (D - EXTRACT(DAY FROM D) + 32 - EXTRACT(DAY FROM D - EXTRACT(DAY FROM D) + 32)))

Saber si es año bisiesto debe evaluar a true lo siguiente:
( 2 = EXTRACT(MONTH FROM (D - EXTRACT(YEARDAY FROM D) + 59)) )

La semana del año empezando la semana en Lunes:
(EXTRACT(YEARDAY FROM D) - EXTRACT(WEEKDAY FROM D-1) + 7) / 7

1 comentario:

  1. Carlos:

    Estoy haciendo una interfase con Firebird y no se como trabajar la funcion de fecha, el formato de la fecha (glrent.fecha) viene dado en : 2006-12-31 00:00:00,deseo agrupar por 2006-12, En otras bases de datos lo he manjedado como : SELECT YEAR TO MONT (glrent.fecha),no se como hacerlo en Firebird. El query donde lo estoy haciendo es el que sigue.

    Agradezco su ayuda
    heljim@novelsoft.com.co


    SELECT glrent.fecha,
    glrent.nit,
    glrent.cuenta1,
    glrent.cuenta2,
    glrent.cuenta3,
    glrent.cuenta4,
    glrent.nomcuen,
    glrent.empresa, SUM(glrent.debito),
    SUM(glrent.credito)
    ROM glrent
    WHERE glrent.e = 1
    AND glrent.s =1
    GROUP BY glrent.fecha,
    glrent.nit,
    glrent.cuenta1,
    glrent.cuenta2,
    glrent.cuenta3,
    glrent.cuenta4,
    glrent.nomcuen,
    glrent.empresa
    ORDER BY glrent.fecha,

    ResponderBorrar