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_helpcollations()b ..对于返回标量值的内置用户定义函数,必须将函数名称指定为单部分名称(不指定数据库或所有者).不要指定前导双冒号(::).
在MS SQL Server 2005中:
返回表的UDF不再需要双冒号.
然而...
在授予模式,证书,端点和一些其他安全性时,SQL Server 2005中需要双冒号.
以及...
使用用户定义类型时,必须使用双冒号语法调用该类型的静态方法.
消息来源:BOL和Kalen 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
它可能是一个强制转换,转换a.dc为 type date。
IBM Informix Dynamic Server (IDS) 会以这种方式工作 - 但末尾的 INTERVAL 表示法对于 IDS 无效,因此推测这实际上是另一个 DBMS(可能是PostgreSQL)。