Crear campo calculado con uno tipo DATE y otro TIME

Buenos días
He creado dos campos calculados uniendo un Campo tipo Fecha con otro tipo Hora.
La forma ha sido la siguiente:
“FechaEntrada” || ’ ’ || “HoraEntrada” “Entrada”,
“FechaSalida” || ’ ’ || “HoraSalida” “Salida”,
El resultado es YYYY-mm-dd hh:mm:ss.0000
Quiero crear otro con la diferencia de los dos:
CAST( ( ( “Salida” - “Entrada” ) * 24 ) AS DECIMAL ( 10 , 2 ) ) “HorasTrabajadas”

Al guardar la consulta indica que la columna entrada es desconocida.
He multipicado x 24 porque en otra consulta que había realizado, con los campos de la tabla tipo TIMESTAMP, para calcular la diferencia de tiempo esa funcionaba.
Un saludo,

Version: 24.2.0.2 (X86_64) / LibreOffice Community
Build ID: b1fd3a6f0759c6f806568e15c957f97194bbec8f
CPU threads: 8; OS: Linux 6.7; UI render: default; VCL: kf5 (cairo+wayland)
Locale: es-ES (es_ES.UTF-8); UI: es-ES
Fedora 39 Plasma

El resultado de

"FechaEntrada" || ' ' | "HoraEntrada" "Entrada"

parece un TIMESTAMP, pero es CHAR. Por lo tanto, primero debe convertirse en TIMESTAMP antes de poder utilizarlo para otros cálculos.

Hola.
Lo he conseguido.No ha podido ser en la misma consulta.
He tenido que hacer dos:
Una para convertir en TIMESTAMP y otra para calcular la diferencia de horas.

SELECT CAST( “Salida1” AS TIMESTAMP ) “Salidas”, CAST( “Entrada1” AS TIMESTAMP ) “Entradas”, “idHorario” FROM “VHorarios”

SELECT CAST( ( ( “Salidas” - “Entradas” ) * 24 ) AS DECIMAL ( 10 , 2 ) ) “HorasTrabajadas”, “idHorario” FROM “ConvertDataStamp”
Un saludo,

También trabaja directamente con

SELECT CAST((( "Salidas"-"Entradas") * 24) AS DECIMAL(10,2)) "HorasTrabajadas", 
"idHorario" 
FROM 
(SELECT CAST( "Salida1" AS TIMESTAMP ) "Salidas", 
CAST( "Entrada1" AS TIMESTAMP ) "Entradas", "idHorario" 
FROM "VHorarios")

Ya he conseguido un avance.
En la vista de tablas he creado los dos campos calculados, formateados como TIMESTAMP.
Funcionan correctamente.
Con ello evito una consulta.
En la misma no puedo realizar otro campo calculado que opere sobre ambos.
Siempre da error y no reconoce uno de los mismos.

Vista: VHorarios

SELECT “Horarios”.“idHorario”, “Trabajadores”.“IdTrabajador”, “TipoJornada”.“IdJornada”, “TipoJornada”.“Jornada”, “Horarios”.“FechaEntrada”, “Horarios”.“HoraEntrada”, “Horarios”.“FechaSalida”, “Horarios”.“HoraSalida”, “Horarios”.“Observaciones”, CAST( ( “Horarios”.“FechaEntrada” || ’ ’ || “Horarios”.“HoraEntrada” ) AS TIMESTAMP ) “Entrada”, CAST( ( “Horarios”.“FechaSalida” || ’ ’ || “Horarios”.“HoraSalida” ) AS TIMESTAMP ) “Salida”, “Trabajadores”.“NombreApellidos”, “Trabajadores”.“DNI”, “Trabajadores”.“N_Seg_Social” FROM “Horarios”, “Trabajadores”, “TipoJornada” WHERE “Horarios”.“IdTrabajador” = “Trabajadores”.“IdTrabajador” AND “Horarios”.“IdJornada” = “TipoJornada”.“IdJornada” ORDER BY “Horarios”.“idHorario” ASC

Si sobre la misma creo el campo:
CAST( ( ( “Salida” - “Entrada” ) * 24 ) AS DECIMAL ( 10 , 2 ) ) “HorasTrabajadas”

Al guardar da error. Dice que no reconoce el campo “Entrada”

Por ahora tengo una consulta exprofeso sólo para ello.
Seguiré probando.
Un saludo.

En una consulta, no se puede acceder a los campos definidos en la misma fila mediante un alias. Por lo tanto, tendría que volver a utilizar CAST( ( "Horarios"."FechaSalida" || ' ' || "Horarios"."HoraSalida" ) AS TIMESTAMP ) en lugar del alias "Salida".
Espero que Deepl haya traducido todo correctamente.

CAST( ( ( 
CAST( ( "Horarios"."FechaSalida" || ' ' || "Horarios"."HoraSalida" ) AS TIMESTAMP ) - 
CAST( ( "Horarios"."FechaEntrada" || ' ' || "Horarios"."HoraEntarda" ) AS TIMESTAMP ) 
) * 24 ) AS DECIMAL ( 10 , 2 ) ) "HorasTrabajadas"
1 Like

Sí, lo ha traducido correctamente y se te entiende bastante bien. ¡Eres fantástico, ayudando incluso en idiomas que no dominas!

Había intentado hacerlo de la misma forma, pero siempre me daba error.
Cuando me he fijado en el primer CAST hay tres paréntesis. Lo máximo que puse fueron 2.
No sé las pruebas que hice con la misma fórmula, pero el hacerlo sin saber, por si aciertas …

La verdad es que encuentro poca información sobre LibreOffice Base Firebird. Tengo la documentación de Firebird.
El adaptarla me cuesta mucho, pero vamos aprendiendo poco a poco.
Sobre el posible bug, a ver si tengo tiempo. Qué el ser jubilado y abuelo te quita mucho tiempo.
Gracias y un saludo,

De Inglés tengo poca idea. Leo algo de tanto buscar información.
En mis tiempos mozos era el francés. Y, encima, hice el Bachiller Superior por letras, latín y griego.

Mi “lengua materna” es el alemán. También publiqué allí el “Base-Handbuch”. Contiene mucho sobre Firebird - pero desafortunadamente en alemán. La guía base en inglés es una traducción de un antiguo manual base en alemán. También contiene información sobre Firebird.

Tienes un buen foro de Firebird en español.

Mariosv.- La página de Firebird SQL, la conozco y he buscado información el la misma en mas de una ocasión.
Lleva tiempo con pocas entradas. El foro no lo encuentro, parece que ya no existe.

RobertoG.- Tu libro “Base-Handbuch” versión 4, traducido al Ingés lo tengo hace tiempo. Lo he consultado bastante por las dudas.

Un saludo,

Picando en ‘Firebird S1L’ (en azul) a mi me funciona el enlace.