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

时间:2011-04-22 18:08:24

标签: sql postgresql casting

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

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

4 个答案:

答案 0 :(得分:56)

它根据RDBMS而有所不同,但如果我猜对了,那就是PostgreSQL,在这种情况下,::会将a.dc转换为日期类型date

其他风味......

在MS SQL Server 2000中:

  

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

在MS SQL Server 2005中:

  

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

然而......

  

SQL中需要双冒号   授予权限时的Server 2005   在模式,证书,端点,   还有一些其他的安全措施。

以及......

  

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

来源:BOLKalen Delaney's Blog

答案 1 :(得分:19)

在这种情况下,它是对日期类型的强制转换。 ::是一个类型转换,也可以表示为CAST(表达式AS类型)。

答案 2 :(得分:2)

这是一个CAST操作(转换为日期类型)。

示例:

SELECT now()::timestamp(0);

等效于:

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

它们都导致将now()转换为timestamp,格式如下:YYYY-MM-DD HH:MM:SS

答案 3 :(得分:1)

可能是演员,将a.dc转换为date类型。

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