全部产品
Search
文档中心

:类型转换函数

更新时间:Feb 03, 2026

本文为您介绍Hologres已支持的类型转换函数及使用案例。

函数名

返回类型

描述

用例

结果

备注

TRY_CAST

  • INTEGER,SMALLINT,BIGINT

  • REAL,DOUBLE PRECISION

  • BOOLEAN

  • DECIMAL

  • JSONB

尝试将TEXT类型的数据转换成目标数据类型,当尝试转换的数据不符合目标数据类型约束时,不会抛出异常,而是自动将异常数据转换为NULL值。

  1. 创建try_cast_test目标表并写入测试数据。

    --创建目标表try_cast_test。
    CREATE TABLE IF NOT EXISTS  try_cast_test (
     key int,
     value text
    );
    
    --向目标表中写入测试数据。
    INSERT INTO try_cast_test VALUES (1, '1'), (2, 'abc');
  2. 使用try_cast函数将TEXT类型的数据转换为INT类型。

--将value列TEXT类型的数据转换为INT类型,并放在value_int列展示。
SELECT
 key,
 value,
 try_cast (value AS INT) as value_int
FROM
 try_cast_test;
 key | value | value_int 
-----+-------+-----------
    1|1      |         1
    2|abc    |\N 
(2 rows)

value列值“abc”由于无法转换成INT类型,try_cast函数将异常数据处理为NULL值

本函数为Hologres的扩展函数,要求Hologres实例版本必须为V2.2,若您的实例为V2.1或以下版本,可联系Hologres技术支持升级实例。

to_char(timestamp, text)

TEXT

将时间戳转换为字符串,支持时间范围为1925~2282年。

to_char(current_timestamp, 'HH12:MI:SS')

06:26:33

从1.1.31版本开始,在SQL前执行set hg_experimental_functions_use_pg_implementation = ‘to_char’; 或者set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';可支持所有时间。

说明

使用该GUC参数后,查询性能约有50%的损失,升级至Hologres V1.1.42及以上版本后,约有20%的损失。

to_char(int, text)

TEXT

将整数转换为字符串。

to_char(125, '999')

125

to_char(double precision, text)

TEXT

将实数或双精度数转换为字符串。

to_char(125.8::real, '999D9')

125.8

to_date(text, text)

DATE

将字符串转换为日期,支持时间范围为1925~2282年。

  • to_date('05 Dec 2000', 'DD Mon YYYY')

  • to_date('2000 12 05', 'YYYY MM DD')

2000-12-05

从1.1.31版本开始,在SQL前执行set hg_experimental_functions_use_pg_implementation = 'to_date' ;或者set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; 可支持所有时间。

说明

使用该GUC参数后,查询性能约有50%的损失,升级至Hologres V1.1.42及以上版本后,约有20%的损失。

to_number(text, text)

NUMERIC

将字符串转换为数字。

to_number('12,454.8-', '99G999D9S')

-12454.8

to_timestamp(text, text)

TIMESTAMP

将字符串转换为时间戳,支持时间范围为1925~2282年。

to_timestamp('05 Dec 2000', 'DD Mon YYYY')

2000-12-05 00:00:00

  • 执行结果不包含+08

  • 从1.1.31版本开始,在SQL前执行set hg_experimental_functions_use_pg_implementation = 'to_timestamp'; 可支持所有时间。

说明

使用该GUC参数后,查询性能约有50%的损失,升级至Hologres V1.1.42及以上版本后,约有20%的损失。

array_to_string(anyarray, text [, text])

TEXT

将数组转换为字符串。

array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')

1,2,3,*,5

array_agg(expression)

ARRAY

将值串联到数组中,可作为字符串转数组、列转行使用。

  • array_agg(123)

  • array_agg(colname)

  • {123}

  • {1,2}

array_agg (expression[ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]

ARRAY

将值串联到数组中,可作为字符串转数组、列转行使用,可以在表达式中支持Filter过滤条件。

array_agg(name) filter (where id >3) from f_test

{a5,a6,a7,a7,"{namea,nameb,namec}",a9,a4}

支持Filter表达式需要Hologres实例为V1.3及以上版本。

string_agg(expression)

TEXT

使用指定分隔符将字段的非空值串联成字符串,可作为列转行。

string_agg(colname, '-')

a-b-c

string_agg (expression [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]

TEXT

使用指定分隔符将字段的非空值串联成字符串,可作为列转行使用,同时在表达式中支持Filter过滤条件。

string_agg(name,',') filter (where id >3) from f_test

a7,a7,a5,a4,{namea,nameb,namec},a9,a6

支持Filter表达式需要Hologres实例为V1.3及以上版本。

regexp_split_to_table(string text, pattern text )

TEXT

使用POSIX正则表达式分割字符串,可作为行转列。

regexp_split_to_table('hello world', '\s+')

hello

world

isnumeric(text)

BOOLEAN

判断输入字符串是否是有效数字类型。

isnumeric('95.5')

true

从V1.1版本开始支持。

row_to_json

JSON

把一行数据转换为JSON。

row_to_json(t) from (select col1,col2 ,...from table) as t

"{"f1":"1","f2":"0"}""{"f1":"0","f2":"0"}""{"f1":"fa","f2":"fb"}""{"f1":"fa","f2":"fb"}"

仅V1.3及以上版本支持该函数。

row()

ARRAY或者TEXT

返回公式所在的行号。

select a,b from row_table where row(a,b) =row(b,a) ;

a    b
0    0

仅V1.3及以上版本支持该函数。