数据类型的转换

在PLOSCAR的赋值操作或函数参数调用中,会涉及从源类型到目标类型的类型转换。PLOSCAR支持显式和隐式两种数据类型转换方式。

示例1:隐式转换

隐式转换是指PLOSCAR会根据需要自动将源数据类型转换成目标数据类型。

--  清理环境
DROP FUNCTION func(INTEGER) CASCADE;

--  创建函数
CREATE FUNCTION func(i INTEGER) RETURN INT AS
BEGIN
    RETURN i :: text ;
END;

/

--隐式转换
SELECT func('1.23'); 
FUNC(int)      |
---------------
1              |
总数目:1

--删除
DROP FUNCTION func(INTEGER) CASCADE; 

在执行过程中会自动调用类型转换函数将浮点类型的‘1.23’转换为INT4类型的。

示例2:显式转换

显式转换是指用户通过转换函数(例如:text())或转换操作符(例如:::text)显式的指定转换的目标类型。

--  清理环境
DROP FUNCTION func(INT4) CASCADE;

--  创建函数
CREATE FUNCTION func(i INT4) RETURN INT AS
BEGIN
    RETURN i :: text ;
END;

/

--通过类型转换操作符
SELECT func('123'::INT4);  
FUNC(int)      |
---------------
123            |
总数目:1

    
--通过与目标类型同名的内部函数    
SELECT func( INT4('123') ); 
FUNC(int)      |
---------------
123            |
总数目:1


--通过CAST    
SELECT func(cast('123' as INT4));  
FUNC(int)      |
---------------
123            |
总数目:1

--字符串'abcd'无法转换成整数
SELECT test_type_conver('abcd'::INT4);     
ERROR, 错误的数值格式 'abcd'


--  删除函数
DROP FUNCTION func(INT4) CASCADE;

注解

值得注意的是,隐式转换和显式转换方式实际上都是调用了神通数据库内部转换函数进行转换的。 如果系统中找不到相应的转换函数或者转换函数无法进行转换,就会出错。

例如:

SELECT func(TRUE); --布尔型'true'无法转换成整数

SELECT func('abcd'::int4); --字符串'abcd'无法转换成整数