FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Sumar TimeStamp en la sección Where
Hola a todos,
Soy nuevo en este foro y lo primero es dar las gracias a todos por las respuestas que en el mismo he encotrado, me han sido de mucha ayuda. Mi pregunta es la siguiente: ¿Como puedo hacer operaciones con campos de tipo TimeStamp en la sección where de una sentencia Select? Mi intención es realizar un prodimiento almacenado que me indique si una cita con una duración está dentro las citas ya grabada en la tabla (Agenda) Los campos que intervienen en la consulta son: FECHA (TimeStamp) fecha de la cita. HORA (TimeStamp) hora de la cita. DURACION (TimeStamp) duración de la cita. El procedimiento que he implementado (pero que no compila) es el siguiente: Create procedure Periodo_Ocupado(REFCODEMPLEADO VARCHAR(16), REFCODDELEGACION VARCHAR(16), FECHA TIMESTAMP, HORA TIMESTAMP, DURACION TIMESTAMP) RETURNS (Ocupado INTEGER) AS DECLARE VARIABLE FechaINI TIMESTAMP; DECLARE VARIABLE FechaFIN TIMESTAMP; BEGIN FechaINI = :FECHA + :HORA; FechaFIN = :FECHA + :HORA + : DURACION; Select count(*) from AGENDA WHERE (FECHA+HORA > :FechaINI and FECHA+HORA < :FechaFIN) OR (FECHA+HORA+DURACION > :FechaINI and FECHA+HORA+DURACION < :FechaFIN) INTO :Ocupado; END; El error que me da es "Expression evaluation not supported". Alguien me podría indicar si IB admite las operaciones con Fecha y en caso afirmativo como se implementan. Muchas gracia y un saludo Ismael. |
#2
|
||||
|
||||
Hola.
Puedes usar una UDF (funciones adicionales disponibles en librerias .dll). Por ejplo, Firebird viene con la fbudf.dll, que incorpora funciones que te pueden ser utiles, como por ejeplo. AddHour, AddMinute, AddSecond. Mira el archivo fbudf.sql en la carpeta /udf de Firebird, para ver las funciones que incorpora, y su declaración. Estas funciones, junto con la estándar extract que soporta directamente el motor, te permitirán hacer lo que deseas. Ejplo. extract(hour from data) te devuelve un entero con la hora. NOTA: Si no usas Firebird, puedes usar una de las que encontrarás en esta Web http://www.cvalde.net/misc/packages_and_utilities.htm Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
||||
|
||||
Se que estoy un poco pez en este asunto. No utilizo FireBird (lo estoy empezando a ver con el manual que le recomendaste a otro forista) utilizo Interbase 6.0. ¿Puedo utilizar la libreria de funciones que me has recomendado en Interbase 6.0? ¿Como se añade al motor de base de datos estas librerías?
Siento hacer esta pregunta de tan poco nivel, pero espero mejorar pronto en este tema. Muchas gracias y un saludo Ismael |
#4
|
||||
|
||||
Cita:
Cita:
declare external function Cita:
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
|