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]

Responder a