Cela varie en fonction du SGBDR, mais si j'ai bien compris, c'est PostgreSQL, auquel 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 une table, le nom de la fonction doit être spécifié avec un double deux-points (::) pour le distinguer des fonctions définies par l'utilisateur qui ne sont pas intégrées. Il doit également être spécifié sous la forme d'un nom en une partie sans qualification de base de données ou de propriétaire. Par 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é sous la forme d'un nom en une partie (ne spécifiez pas la base de données ou le propriétaire). Ne spécifiez pas de double-virgule (::).
Dans MS SQL Server 2005 :
Les doubles-virgules ne sont plus nécessaires pour les UDF qui renvoient une table.
Cependant...
Les doubles-virgules sont requis dans SQLServer 2005 lors de l'octroi d'autorisations sur des schémas, des certificats, des points de terminaison et quelques autres éléments sécurisables.
Ainsi que...
Lors de l'utilisation de types définis par l'utilisateur, les méthodes statiques du type doivent être appelées à l'aide de la syntaxe à double-virgule.
Sources :BOL et le blog de Kalen Delaney