111 votes

Notation des deux points (: :) en SQL

J'ai récupéré le code de quelqu'un et ceci fait partie d'une clause where, quelqu'un sait-il ce que les deux points indiquent ?

b.date_completed >  a.dc::date + INTERVAL '1 DAY 7:20:00'

82voto

Michael Fredrickson Points 24359

Cela varie en fonction du SGBDR, mais si je devine bien, il s'agit de PostgreSQL, dans ce cas le :: convertit a.dc à un type de date de date .

Dans d'autres saveurs...

Dans MS SQL Server 2000 :

Pour les fonctions intégrées définies par l'utilisateur qui renvoient un tableau, le nom de la fonction doit être spécifié avec un double double point (: :) pour le distinguer des fonctions définies par l'utilisateur qui ne sont non intégrées. Il doit également être également être spécifié comme un nom en une partie sans de base de données ou de propriétaire. Pour exemple : SELECT * FROM ::fn_helpcollations() b.. Pour les fonctions intégrées définies par l'utilisateur qui renvoient une valeur scalaire, le nom de la fonction doit être spécifié comme un nom en une partie (ne pas la base de données ou le propriétaire). Ne pas spécifier un double point (: :).

Dans MS SQL Server 2005 :

Les doubles-colonnes ne sont plus nécessaires pour les UDF qui retournent un tableau.

Cependant...

Le point-virgule est obligatoire dans SQL Server 2005 lors de l'octroi de permissions sur les schémas, les certificats, les points de terminaison, et quelques autres éléments sécurisés.

Ainsi que...

Lorsque vous utilisez des types définis par l'utilisateur, les du type doivent être appelées en utilisant la syntaxe du double point de suspension.

Sources : BOL y Blog de Kalen Delaney

37voto

Michael Dean Points 836

Dans ce cas, il s'agit d'un transfert vers un type de date. : : est un transfert de type qui peut également être représenté par CAST(expression AS type).

0 votes

Si vous en êtes sûr, alors peut-être savez-vous pour quel SGBDR ce script est destiné ?

0 votes

Cela ressemble à PostgreSQL pour moi. Connaissez-vous des alternatives qui auraient la même syntaxe ?

0 votes

Je connais certains SGBDR qui prennent en charge la notation à deux points, et j'en connais d'autres qui utilisent la notation à deux points. INTERVAL soutien. C'est le premier morceau de code que j'ai vu qui combine les deux. J'étais juste curieux. Merci pour la réponse.

27voto

trthhrtz Points 500

Il s'agit d'un CAST (converti en un type de date).

Exemple :

SELECT now()::timestamp(0);

Est équivalent à :

SELECT 
    CAST (now() AS timestamp(0));

Ils ont tous deux pour résultat de couler now() a timestamp dans le format suivant : YYYY-MM-DD HH:MM:SS

1 votes

Un autre exemple simple pourrait être : select 1.2::integer ce qui donnera le résultat suivant 1 .

2voto

Jonathan Leffler Points 299946

Il s'agit probablement d'un moulage, d'une conversion a.dc à taper date .

IBM Informix Dynamic Server (IDS) fonctionnerait ainsi - mais la notation INTERVAL à la fin n'est pas valable pour IDS, donc il s'agit probablement d'un autre SGBD (probablement PostgreSQL ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X