He recogido el código de alguien y esto es parte de una cláusula where, ¿alguien sabe lo que indican los dos puntos dobles?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
He recogido el código de alguien y esto es parte de una cláusula where, ¿alguien sabe lo que indican los dos puntos dobles?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Respuestas:
Varía según el RDBMS, pero si supongo que es correcto, es PostgreSQL, en cuyo caso se ::
convierte a.dc
a un tipo de fecha date
.
En otros sabores ...
En MS SQL Server 2000:
Para las funciones integradas definidas por el usuario que devuelven una tabla, el nombre de la función debe especificarse con dos puntos dobles al principio (: :) para distinguirlo de las funciones definidas por el usuario que no están integradas. También debe especificarse como un nombre de una parte sin base de datos ni calificaciones del propietario. Por ejemplo: SELECT * FROM :: fn_helpcollations () b .. Para funciones integradas definidas por el usuario que devuelven un valor escalar, el nombre de la función debe especificarse como un nombre de una parte (no especifique la base de datos ni el propietario). No especifique dos puntos dobles iniciales (: :).
En MS SQL Server 2005:
Ya no se requieren dos puntos dobles para las UDF que devuelven una tabla.
Sin embargo...
Se requieren dos puntos en SQL Server 2005 cuando se otorgan permisos en esquemas, certificados, puntos finales y algunos otros elementos protegibles.
Tanto como...
Cuando se utilizan tipos definidos por el usuario, los métodos estáticos del tipo deben llamarse utilizando la sintaxis de dos puntos.
Fuentes: Blog de BOL y Kalen Delaney
En este caso, es una conversión a un tipo de fecha. :: es un tipo de conversión que también se puede representar como CAST (expresión AS tipo).
INTERVAL
soporte. Este es el primer fragmento de código que he visto que combina ambos. Solo tenía curiosidad. Gracias por la respuesta.
Es una CAST
operación (convertida a un tipo de fecha).
Ejemplo:
SELECT now()::timestamp(0);
Es equivalente a:
SELECT
CAST (now() AS timestamp(0));
Ambos resultado en la fundición now()
a timestamp
en el siguiente formato:YYYY-MM-DD HH:MM:SS
select 1.2::integer
que generará el resultado como 1
.
Probablemente sea un elenco, convirtiéndose a.dc
en tipografía date
.
IBM Informix Dynamic Server (IDS) funcionaría de esa manera, pero la notación INTERVAL al final no es válida para IDS, por lo que presumiblemente se trata de otro DBMS (probablemente PostgreSQL ).