SQL中的双冒号(:)表示法

已经拿起某人的代码,这是一个where子句的一部分,任何人都知道双冒号指示什么?

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

它根据RDBMS而有所不同,但如果我猜对了,那就是PostgreSQL,在这种情况下, ::a.dc转换为datetypes。

在其他口味…

在MS SQL Server 2000中:

对于返回表的内置用户定义函数,必须使用前导双冒号(:)来指定函数名称,以将其与不是内置的用户定义函数区分开来。 它也必须被指定为没有数据库或所有者资格的单一部分名称。 例如:SELECT * FROM :: fn_helpcollat​​ions()b ..对于返回标量值的内置用户定义函数,必须将函数名称指定为单部分名称(不指定数据库或所有者)。 不要指定一个前导双冒号(::)。

在MS SQL Server 2005中:

对于返回表的UDF,不再需要双冒号。

然而…

授予架构,证书,端点和其他一些安全措施的权限时,SQL Server 2005中需要双冒号。

以及…

使用用户定义types时,必须使用双冒号语法来调用该types的静态方法。

资料来源: BOL和Kalen Delaney的博客

在这种情况下,它是对datetypes的转换。 ::是一个types转换,也可以表示为CAST(expression式AStypes)。

这可能是一个a.dc转换,将a.dc转换为datetypes。

IBM Informix Dynamic Server(IDS)将以这种方式工作 – 但最后的INTERVAL表示法对于IDS无效,所以这可能是另一个DBMS(可能是PostgreSQL )。