Hola Marcelo
Computos Villa Elisa escribió:
y agrego otra (ya que estamos) funciona DATEADD?
con "funciona" seguro quieres decir "funciona en las bases de datos
embebidas dentro de un doc ODB, que emplean el engine HSQLDB"
respuesta: lamentablemente NO. La función DATEADD la has empleado
seguramente en M$Access.
Otros RDBMS tienen funciones para sumar y restar intervalos de tiempo a
una fecha, por ejemplo, MySQL tiene DATE_ADD(date,INTERVAL expr type)y
DATE_SUB(date,INTERVAL expr type).
Se podría crear una función que hago lo que DATEADD. HSQLD tiene "en
principio" (al menos cuando funciona solo) la
posibilidad de crear funciones y almacenarlas, PERO como una clase Java
(y ¿a qué usuario le podemos pedir que cree y compile su propia clase?).
Otros RDBMS tienen un modo muchísimo más fácil de crear funciones
personalizadas (el ejemplo ya citado, MySQL, e incluso PostgreSQL tiene
PL/pgSQL: un lenguaje muy fácil de aprender y aplicar).
Esta "deficiencia" de HSQLDB se ve también en otros temas (como la
creación de TRIGGERS [explicado muy mal y rápido: es un disparador de
eventos: por ejemplo cuando haces algo en una tabla - insertas, borras,
actualizas - se realiza automáticamente otra acción en la misma o
diferente tabla]: también requieres una clase Java, mientras que en
MySQL simplemente empleas una instrucción SQL).
¿Qué aconsejar? ¿Que abandones las bases embebidas y te pases a MySQL o
PostgreSQL (o incluso otro RDBMS 100% Java como Apache Derby, que en
muchos aspectos es mejor que HSQLDB) SIN NECESIDAR DE ABANDONAR OOoBASE,
pues con el driver apropiado puede conectarse a esos servidores?
Las bases embebidas tienen la ventaja de que son "portables": tienes
todo dentro de un archivo. Para tareas hogareñas o de poca monta, y que
no requieren ser consultadas por más de un usuario a la vez, sigue
empleándolas (que además está planeado integrar Apache Derby como otro
motor bases embebidas). Para tareas más profesionales, o bases más
voluminosas, o si deseas "servirlas" (horrible anglicismo), debes
emplear un RDBMS, y si bien HSQLDB puede "correr" en modo servidor, mis
favoritos son MySQL y PostgreSQL (dependiendo del uso que les des).
*****************************************************************************
Para terminar, las funciones de fecha y hora disponibles en HSQLDB son
* CURDATE() retorna la fecha actual
* CURTIME() " la hora actual
* DATEDIFF(string, datetime1, datetime2) explicación en el mail anterior
* DAYNAME(date) retorna el nombre del día EN INGLÉS!!!
* DAYOFMONTH(date) " el día del mes (1-31)
* DAYOFWEEK(date) " el día de la semana (1 == domingo)
* DAYOFYEAR(date) " el día del año (1-365/6)
* HOUR(time) " la hora (0-23)
* MINUTE(time) " los minutos (0-59)
* MONTH(date) " el mes (1-12)
* MONTHNAME(date) " el nombre del mes EN INGLÉS!!!
* NOW() " la fecha y hora actuales == CURRENT_TIMESTAMP
* QUARTER(date) " el cuatrimestre (1-4)
* SECOND(time) " retorna los segundos (0-59)
* WEEK(date) " retorna el número de semana del año (1-53)
* YEAR(date) " el año
* CURRENT_DATE " la fecha actual
* CURRENT_TIME " la hora actual
* CURRENT_TIMESTAMP "la fecha y hora actuales
********************************************************************************************
¿Cómo emular DATEADD en las bases embebidas?
* se puede emplear una función OOoBasic si estamos trabajano con
formularios, en vez de directte. con las tablas
* se puede (¿se podrá? tengo que sentarme a pensarlo) combinar distintas
funciones y operaciones SQL
En la semana veo si encuentro algo y te lo mando.
En principio, es posible imitar funciones empleando estructuras de
control y operadores.
Por ejemplo, el caso de la *EDAD*: en *HSQLDB* hay que dar un par de
vueltas (los ejemplos en mi base), mientras que *PostgreSQL* tiene las
función age() que puede emplearse de dos modos:
age(timestamp, timestamp) == compara dos fechas age(timestamp
'2001-04-10', timestamp '1957-06-13') ==> 43 years 9 mons 27 days
age(timestamp) == compara una fecha con la fecha actual age(timestamp
'1957-06-13') ==> depende de la fecha actual
Como ves, acá *PostgreSQL* le vuelve a sacar la delantera a *HSQLDB*.
Saludos,
Ariel.
-------------------------------------
Ariel Constenla-Haile
La Plata, Argentina
www.arielconstenlahaile.com.ar/ooo/
[EMAIL PROTECTED]
¡_Este_ mail es *texto plano*! :)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]