GaussDB 100类型转换

举报
Gauss100从零单排 发表于 2019/07/23 11:31:10 2019/07/23
【摘要】 GaussDB 100 类型转换

类型转换

在执行SQL语句时可能会在同一表达式中混合不同的数据类型,导致执行结果不一致。Gauss100 OLTP提供的类型转换功能会对不同的数据类型进行转换,保持结果的统一。

如下例子进行了类型转换:

--创建表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 dual;
--更新字符串列, 但输入的是一个整数
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

下表中给出不同数据类型之间的转换关系,表中第一行表示目标转换类型,第一列表示源类型。若两种类型的转换不满足表中的关系,将会返回类型不匹配的错误。

数据类型

数值类型

字符串类型

日期类型

二进制类型

布尔类型

时间间隔类型

数值类型

×

×

整数类型(√)

0为false,非0为true

×

字符串类型

日期类型

×

×

×

×

二进制类型

×

×

×

×

布尔类型

(整数0或1)

(字符串TRUE或FALSE)

×

×

×

时间间隔类型

×

×

×

×

√,但INTERVAL YEAR TO MONTH和INTERVAL DAY TO SECOND之间是不能相互转换的


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。