GaussDB/postgresql/opengauss中双冒号的含义
---------- start ----------
原因是我想查看pg_tables的表定义,发现其中有一些双冒号符,搜查了一些资料,特此解释
hcie=# \d+ pg_tables View "pg_catalog.pg_tables" Column | Type | Modifiers | Storage | Description ---------------+--------------------------+-----------+---------+------------- schemaname | name | | plain | tablename | name | | plain | tableowner | name | | plain | tablespace | name | | plain | hasindexes | boolean | | plain | hasrules | boolean | | plain | hastriggers | boolean | | plain | tablecreator | name | | plain | created | timestamp with time zone | | plain | last_ddl_time | timestamp with time zone | | plain | View definition: SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS tablespace, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, c.relhastriggers AS hastriggers, CASE WHEN pg_check_authid(po.creator) THEN pg_get_userbyid(po.creator) ELSE NULL::name END AS tablecreator, po.ctime AS created, po.mtime AS last_ddl_time FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace LEFT JOIN pg_object po ON po.object_oid = c.oid AND po.object_type = 'r'::"char" WHERE c.relkind = 'r'::"char";
双冒号语法(::)是GaussDB中的显示类型转换的符号,相当于CAST函数
语法格式为:
expression::data_type -- 类似于CAST函数的语法 SELECT CAST(expression AS data_type);
不过官方并不建议使用双冒号符来作强制类型转换,GaussDB中使用双冒号将函数入参转换为期望类型可能导致结果超出预期
双冒号符使用示例
--- 不加任何修饰符的数值 hcie=# select 1; ?column? ---------- 1 (1 row) --- 加上双冒号转换符 hcie=# select 1::int; int4 ------ 1 (1 row) hcie=# select 1::integer; int4 ------ 1 hcie=# SELECT '2024-01-02'::date; timestamp --------------------- 2024-01-02 00:00:00 (1 row) hcie=# SELECT '01-OCT-2024'::date; timestamp --------------------- 2024-10-01 00:00:00 (1 row)
分类:
GaussDB
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?