我拿起某人的代码,以下是一个 WHERE条款的一部分。这里的双冒号表示什么?
WHERE
b.date_completed > a.dc::date + INTERVAL '1 DAY 7:20:00'
它可能是一个强制转换,将 a.dc转换为 date类型。
a.dc
date
IBM Informix Dynamic Server (IDS)可以这样工作-但是最后的 INTERVAL 符号对 IDS 无效,因此推测这实际上是另一个 DBMS (可能是 PostgreSQL)。
它根据 RDBMS 而变化,但如果我猜对了,那就是 PostgreSQL,在这种情况下,::将 a.dc转换为 date的日期类型。
::
其他口味的..。
在 MSSQLServer2000中:
用于内置的用户定义函数 返回一个表的函数名 必须用引导符指定 双冒号(: :)来区分它 从用户定义的函数 不是内置的。它也必须是 指定为由一部分组成的名称,没有 资料库或业主资格 示例: SELECT * FROM : : fn _ help collations () b. For kernel-in 用户定义函数,它们返回一个 标量值,则函数名必须为 指定为由一部分组成的名称(做 不要指定数据库或所有者) 指定一个前导双冒号(: :)。
在 MSSQLServer2005中:
不再需要双冒号 用于返回表的 UDF。
但是..。
SQL 中需要使用双冒号 授予权限时的服务器2005 模式,证书,端点, 还有其他一些安全措施。
还有..。
使用用户定义类型时,静态 类型的方法必须被调用 使用双冒号语法。
资料来源: BOL和 卡伦 · 德莱尼的博客
在本例中,它是对日期类型的强制转换。: : 是一个类型强制转换,也可以表示为 CAST (表达式 AS 类型)。
它是一个 CAST操作(强制转换为日期类型)。
CAST
例如:
SELECT now()::timestamp(0);
相当于:
SELECT CAST (now() AS timestamp(0));
它们都导致将 now()转换为以下格式的 timestamp: YYYY-MM-DD HH:MM:SS
now()
timestamp
YYYY-MM-DD HH:MM:SS