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

Pat*_*Pat 64 sql postgresql casting

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

b.date_completed >  a.dc::date + INTERVAL '1 DAY 7:20:00'
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 58

它根据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的博客


tec*_*kuz 23

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

例子:

SELECT now()::timestamp(0);

相当于:

SELECT 
    CAST (now() AS timestamp(0));
Run Code Online (Sandbox Code Playgroud)

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

  • 另一个简单的例子可能是:“select 1.2::integer”,它将输出结果“1”。 (3认同)

小智 19

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


Jon*_*ler 3

它可能是一个强制转换,转换a.dc为 type date

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