掌握了某人的代码,这是where子句的一部分,有人知道双冒号表示什么吗?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
掌握了某人的代码,这是where子句的一部分,有人知道双冒号表示什么吗?
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
Answers:
根据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的博客
在这种情况下,它强制转换为日期类型。::是类型转换,也可以表示为CAST(表达式AS类型)。
INTERVAL
。这是我见过的结合了两者的第一段代码。我只是好奇而已。谢谢回复。
这是一项CAST
操作(转换为日期类型)。
例:
SELECT now()::timestamp(0);
等效于:
SELECT
CAST (now() AS timestamp(0));
它们都导致转换now()
为timestamp
以下格式:YYYY-MM-DD HH:MM:SS
select 1.2::integer
,它将输出结果为1
。
它可能是转换a.dc
为type的强制转换date
。
IBM Informix Dynamic Server(IDS)可以那样工作-但结尾处的INTERVAL标记对IDS无效,因此,实际上这可能是另一个DBMS(可能是PostgreSQL)。