Gustavo:
Cuando empecé a programar en Firebird tuve la necesidad de hacer una funcion que si le mandada cualquier fecha dentro de los primeros quince dias del mes, esta me regresara todos los dias de la primera quincena de dicho mes. De la misma manera, si la fecha estaba dentro de la segunda quincena, me regrasaba todos los dias de la segunda quincena.
Asi fue como la hice:
Código SQL
[-]
CREATE OR ALTER PROCEDURE DAYSOFMONTH(
D DATE)
RETURNS (
DOM DATE)
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE LD INTEGER;
BEGIN
I = 1;
LD = EXTRACT(DAY FROM (D - EXTRACT(DAY FROM D) + 32 - EXTRACT(DAY FROM D - EXTRACT(DAY FROM D) + 32)));
IF (EXTRACT(DAY FROM D) > 15) THEN
I = 16;
ELSE
LD = 15;
DOM = D - EXTRACT(DAY FROM D) + I;
WHILE (I <= LD) DO
BEGIN
SUSPEND;
DOM = DOM + 1;
I = I + 1;
END
END
No dejes de contarnos si te funcionó para lo que tú querias.
Saludos.
Gerardo Suárez
P.D. Por cierto, cada que me es posible evito los funciones externas (UDF's)