DATEDIFF()

3 comentarios

Descripción: Devuelve el número de años, meses, semanas, días, horas, minutos, segundos y milisegundos que hay de diferencia entre dos valores que sean de tipo fecha u hora.

Tipo de resultado: Bigint

Sintaxis:

DATEDIFF(<argumentos>)

<argumentos> = <unidad> FROM <momento1> TO <momento2>

<unidad>, <momento1>, <momento2>

<unidad>     = YEAR | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND | MILLISECOND

<momentoN> = una expresión que sea DATE, TIME o TIMESTAMP

  • Los tipos de datos DATE y TIMESTAMP pueden ser combinados. Otras combinaciones no son admitidas
  • Con argumentos de tipo DATE y TIMESTAMP todas las unidades pueden ser usadas
  • Con argumentos de tipo TIME solamente HOUR, MINUTE, SECOND y MILLISECOND pueden ser usados
  • Un resultado negativo indica que momento2 ocurrió antes que momento1

Ejemplos:

SELECT
   DATEDIFF (HOUR FROM CURRENT_TIMESTAMP TO TIMESTAMP '21-Apr-2013 08:00')
FROM
   RDB$DATABASE

SELECT
   DATEDIFF(MINUTE FROM TIME '0:00' TO CURRENT_TIME)
FROM
   RDB$DATABASE

SELECT
   DATEDIFF(MONTH, CURRENT_DATE, DATE '1-1-2000')
FROM
   RDB$DATABASE

SELECT
   DATEDIFF(DAY FROM CURRENT_DATE TO CAST(? AS DATE))
FROM
   RDB$DATABASE

.

Usando un SELECT dentro de una función agregada

1 comentario

Normalmente dentro de las funciones agregadas: MAX(), MIN(), AVG(), etc., no se puede escribir un SELECT ya que algo como esto:

SELECT
   MAX(SELECT MAX(PRD_PREVTA) FROM PRODUCTOS)
FROM
   CLIENTES

mostrará el error: “Invalid token” o el error “Token unknown”

Sin embargo, hay un truco para conseguirlo y es agregando un nuevo par de paréntesis, así:

SELECT
   MAX((SELECT MAX(PRD_PREVTA) FROM PRODUCTOS))
FROM
   CLIENTES

Solamente una acotación más: la tabla principal (en el ejemplo CLIENTES) debe tener al menos una fila o el resultado obtenido será NULL.

.