SQL 中的双冒号‘ : :’表示法

我拿起某人的代码,以下是一个 WHERE条款的一部分。这里的双冒号表示什么?

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

它可能是一个强制转换,将 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操作(强制转换为日期类型)。

例如:

SELECT now()::timestamp(0);

相当于:

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

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