类型转换
在执行SQL语句时可能会在同一表达式中混合不同的数据类型,导致执行结果不一致。GaussDB 100提供的类型转换功能会对不同的数据类型进行转换,保持结果的统一。
如下例子进行了类型转换:
--创建表T_TEST_CAST。 DROP TABLE IF EXISTS T_TEST_CAST; CREATE TABLE T_TEST_CAST( SECTION_ID NUMBER(10) DEFAULT NULL, SECTION_NAME VARCHAR2(100), SECTION_DATE DATE );
--插入数据。 INSERT INTO T_TEST_CAST VALUES(1,'李宏','2018-01-07 17:18:18'); INSERT INTO T_TEST_CAST VALUES(2,'李力','2018-03-07 14:20:18'); INSERT INTO T_TEST_CAST VALUES(3,'张刚','2018-06-04 17:12:18');
--字符串 --> int select cast('123123' as int) from SYS_DUMMY; --更新字符串列, 但输入的是一个整数 UPDATE T_TEST_CAST SET SECTION_NAME = 1000; --插入日期字段, 但输入的是一个字符串 INSERT INTO T_TEST_CAST(SECTION_DATE) VALUES('2017-12-12 23:23:23');
但并不是所有数据类型都可以相互转换,如下面SQL语句中使用整数字段,更新日期列的值,这显然不合法。诸如这类型的SQL语句可以在验证阶段或执行前将被过滤掉。
UPDATE T_TEST_CAST SET SECTION_DATE = 1000; GS-00606, [1:39]inconsistent datatypes, expected DATE - got BINARY_INTEGER
下表中给出不同数据类型之间的转换关系,表中第一行表示目标转换类型,第一列表示源类型。若两种类型的转换不满足表中的关系,将会返回类型不匹配的错误。
表1 类型转换表 数据类型
数值类型
字符串类型
日期类型
二进制类型
布尔类型
时间间隔类型
数值类型
√
√
×
×
整数类型(√)
0为false,非0为true
×
字符串类型
√
√
√
√
√
√
日期类型
×
√
√
×
×
×
二进制类型
×
√
×
√
×
×
布尔类型
√
(整数0或1)
√
(字符串TRUE或FALSE)
×
×
√
×
时间间隔类型
×
√
×
×
×
√,但INTERVAL YEAR TO MONTH和INTERVAL DAY TO SECOND之间是不能相互转换的
说明:
各种内置类型和布尔类型之间的转换规则请参见《GaussDB 100 1.0.0产品文档》中的“数据库参考信息 > 数据字典和视图”“”。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论