Notación de dos puntos (: :) en SQL

Respuestas:

64

Varía según el RDBMS, pero si supongo que es correcto, es PostgreSQL, en cuyo caso se ::convierte a.dca 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

Michael Fredrickson
fuente
Encontré esta sintaxis utilizada con un UDF en el examen de práctica SQL 2008 MCTS, ¡no se menciona en ninguna parte del libro! Gracias por explicar
Sophia
24

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).

Michael Dean
fuente
Si lo sabe con seguridad, entonces tal vez sepa para qué RDBMS es este script.
Andriy M
Me parece PostgreSQL. ¿Conoce alguna alternativa que tenga la misma sintaxis?
Michael Dean
Conozco algunos RDBMS que admiten la notación de dos puntos dobles y conozco otros que cuentan con el INTERVALsoporte. Este es el primer fragmento de código que he visto que combina ambos. Solo tenía curiosidad. Gracias por la respuesta.
Andriy M
10

Es una CASToperació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 timestampen el siguiente formato:YYYY-MM-DD HH:MM:SS

techkuz
fuente
Otro ejemplo simple podría ser:, select 1.2::integerque generará el resultado como 1.
themefield
0

Probablemente sea un elenco, convirtiéndose a.dcen 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 ).

Jonathan Leffler
fuente