GaussDB(DWS)实践系列-MySQL->GaussDB(DWS)常用语法对照表

举报
四叶草 发表于 2021/08/09 11:19:09 2021/08/09
【摘要】 在项目交付中,经常遇到不同数据库间的数据迁移,本文针对MySQL->GaussDB(DWS)的常用语法兼容性进行了梳理,汇总整理语法对照表,可以参考使用。

GaussDB(DWS)实践系列-MySQL->GaussDB(DWS)常用语法对照表

在项目交付中,经常遇到不同数据库间的数据迁移,本文针对MySQL->GaussDB(DWS)的常用语法兼容性进行了梳理,汇总整理语法对照表,可以参考使用。

序号 分类 MySQL语法 GaussDB(DWS)适配语法 说明
1 日期类型 datetime/datetime(0) timestamp without time zone datetime是没有时区的时间戳,而timestamp是带时区的时间戳,因此,在转换成DWS中的数据类型时,datetime需要转为timestamp without time zone,timestamp转为timestamp with time zone;
改写样例:
Create Table order_info (order_date datetime);替换为
Create Table order_info (order_date TIMESTAMP WITHOUT TIME ZONE);
2 timestamp timestamp with time zone
3 数值类型 tinyint smallint DWS与ADB中均存在tinyint这种数据类型,但是,在ADB中其范围是 -128~127,而DWS中为0~255,两者的数据范围是不一致的。
4 int(11)/bigint(20)/tinyint(4) int/bigint/tinyint DWS中去掉长度约束
5 AUTO_INCREMENT AUTO_INCREMENT自增列修改为serial类型,bigint对应bigserial,int对应serial,SMALLINT 对应SMALLSERIAL AUTO_INCREMENT对应BIGSERIAL/SERIAL/SMALLSERIAL
改写样例:
Create Table market_info('windowId' bigint(20) NOT NULL AUTO_INCREMENT);
替换为
Create Table market_info(windowId bigserial NOT NULL);
6 double double precision double类型对应float类型;
改写样例:
Create Table order_info ( live_id varchar(50), tag_price double );
替换为
Create Table order_info ( live_id varchar(50), tag_price double precision ) ;
7 float(10, 6) float(16)  
8 字符类型 string类型 text类型 改写样例:
Create Table di_corp_replay_prd_indic_d (
 live_id varchar(50)  ,
 tag_price string
);
替换为
Create Table di_corp_replay_prd_indic_d (
 live_id varchar(50)  ,
 tag_price text ,
) ;
9 longtext text DWS使用text代替longtext,Mysql longtext 0-4Gb,DWS text最大为1G-8023B(即1073733621B)
10 列注释 列注释是在创建表语法的每一列之后,例如create table order_info('id' bigint comment '主键'); 列注释语句需要单独使用comment语句添加,例如create table order_info(id bigint);
comment on column order_info.id is '主键';
改写样例:
create table order_info('id' bigint comment '主键');
替换为
create table order_info(id bigint);
comment on column order_info.id is '主键';
11 表注释 建表语句中可以加入表注释,例如Create Table 'order_detail' (
 'corpid' varchar(50)
)  COMMENT='商家订单异常明细';
表注释需要单独写在表结构之外,例如Create Table order_detail (
 corpid varchar(50)
) DISTRIBUTE BY HASH(corpid);
comment on table order_detail is '商家订单异常明细';
改写样例:
Create Table 'order_detail' (
 'corpid' varchar(50)
)  COMMENT='商家订单异常明细';
替换为
Create Table order_detail (
 corpid varchar(50)
) DISTRIBUTE BY HASH(corpid);
comment on table order_detail is '商家订单异常明细';
12 分页 select * from test limit 1,3; select * from test limit 3 offset 1; 分页语法用 limit+offset 改写替换
13 日期函数 date_format() to_char() 改写样例:
select date_format(now(), '%Y/%m/%d %H:%i:%s');
替换为
select to_char(now(),'YYYY-MM-DD HH24:MI:SS');
14 datediff() EXTRACT() 改写样例:
select datediff(date '2003-05-03',date '2003-05-02');
替换为
SELECT EXTRACT(EPOCH FROM (date '2003-05-03'- date '2003-05-02'))/60/60/24;
15 date_sub() 替换为sysdate - interval 改写样例:
select date_sub(now(),interval 1 hour);
替换为
select sysdate - interval '1 hour';
16 date_add() 替换为sysdate + interval 改写样例:
Select date_add(now(),interval 1 hour);
替换为
select sysdate + interval '1 hour';
17 TIMESTAMPDIFF() EXTRACT() 改写样例:
select TIMESTAMPDIFF(second,'2017-07-06 20:00:30','2017-07-06 20:01:00') ;
替换为
SELECT EXTRACT(EPOCH FROM (timestamp '2017-07-06 20:01:00'- timestamp '2017-07-06 20:00:30'));
18 UNIX_TIMESTAMP() EXTRACT() 改写样例:
select UNIX_TIMESTAMP(substr(adddate(NOW() , INTERVAL -1 MONTH),1,10)) * 1000;
替换为
SELECT EXTRACT(EPOCH FROM substr(now() - INTERVAL '1 MONTH',1,10))*1000;
19 MINUTE() date_part() 改写样例:
SELECT MINUTE("2017-06-20 09:34:00");
替换为
SELECT date_part('minute', timestamp '2017-06-20 09:34:00');
20 now() sysdate 改写样例:
select now();
替换为
select sysdate;
21 str_to_date() to_date() 改写样例:
select str_to_date('20201127193000','%Y%m%d%H%i%s');
Oracle兼容模式替换为:
select to_date('2020-11-27 19:30:00','YYYY-MM-DD HH24:MI:SS');
TD兼容模式替换为:
select to_timestamp('2020-11-27 19:30:00','YYYY-MM-DD HH24:MI:SS');
22 current_timestamp() sysdate 改写样例:
select current_timestamp();
替换为
select sysdate;
23 adddate() 替换为sysdate - interval 改写样例:
select adddate(NOW() , INTERVAL -1 MONTH);
替换为
select sysdate - interval '1 month';
24 截取时分秒 date_format() substr() 改写样例:
select date_format(date_add(now(), interval - 5 minute),'%H:%i:%S');
替换为
select substr(sysdate - interval '5 minute',11,14);
25 超长表名 MySQL允许表名超过64位 DWS表名长度不允许超过64位,超过部分被截断; DWS表名长度不允许超过64位,超过部分被截断;
26 BROADCAST表 BROADCAST表 复制表 改写样例:
Create Table di_corp_replay_prd_indic_d (
 live_id varchar(50)  ,
 tag_price double ,
)DISTRIBUTE BY BROADCAST ;
替换为
Create Table di_corp_replay_prd_indic_d (
 live_id varchar(50)  ,
 tag_price double ,
)distribute by REPLICATION;
27 语法替换 if(1=2,'true','false'); 替换为case when 改写样例:
select if(1=2,'true','false');
替换为
select case when 1=2 then 'true' else 'false' end;
28 UUID() sys_guid() 改写样例:
select UUID();
替换为
select sys_guid();
29 ifnull() nvl() 改写样例:
select ifnull(null,'true');
select ifnull(1,'true');
替换为
select nvl(null,'true');
select nvl('1','true');
30 Group_concat() string_agg() 改写样例:
select id,group_concat(name) from aa group by id;
替换为
select id,string_agg(name,',') from aa group by id;
31 distinct id,name distinct(id,name) 改写样例:
select distinct id,name from aa;
替换为
select distinct(id,name) from aa;
32 clustered  key 不支持,去掉 改写样例:
Create Table copy_di_distributor_buyer_contribution_ranking_v2 (
 shop_id varchar ,
 distributor_id varchar ,
 buyer_id varchar ,
 date_type bigint ,
 dw_insert_time varchar ,
 clustered key clustered_key(shop_id ASC,distributor_id ASC,date_type ASC,order_amount_rank ASC),
 primary key (shop_id,distributor_id,date_type,buyer_id)
) DISTRIBUTE BY HASH(shop_id,distributor_id,date_type);
替换为
Create Table copy_di_distributor_buyer_contribution_ranking_v2 (
 shop_id varchar ,
 distributor_id varchar ,
 buyer_id varchar ,
 date_type bigint ,
 dw_insert_time varchar ,
 primary key (shop_id,distributor_id,date_type,buyer_id)
) DISTRIBUTE BY HASH(shop_id,distributor_id,date_type);
33 REPLACE 实时覆盖 merge into 改写样例:
REPLACE INTO edw_akapp_order_info SELECT * FROM outer_edw_akapp_order_info;
替换为
merge into edw_akapp_order_info a using outer_edw_akapp_order_info b
on a.p_order_id = b.p_order_id and a.cartproductid = b.cartproductid;
34 单引号转义  ' \' 改写样例:
and live_name in("【超值】英格莱恩/Ingram's美妆0404", "【美配29】科颜氏 Kiehl's美妆1229", "【必播】爱呵护I'vebaby纸尿裤&拉拉裤0730", "【森马集团】THE CHILDREN'S PLACE童装0718")
替换为
and live_name in ('【超值】英格莱恩/Ingram\'s美妆0404','【美配29】科颜氏 Kiehl\'s美妆1229','【必播】爱呵护I\'vebaby纸尿裤&拉拉裤0730','【森马集团】THE CHILDREN\'S PLACE童装0718')
35 字段命名 字段名支持以数字开头 dws字段名不能以数字开头,需加双引号 改写样例:
CREATE TABLE IF NOT EXISTS order_info(
school TEXT,
grade TEXT,
class TEXT,
20_50w BIGINT,
datetime float
) DISTRIBUTE BY HASH(school);
替换为
CREATE TABLE IF NOT EXISTS order_info(
school TEXT,
grade TEXT,
class TEXT,
"20_50w" BIGINT,
datetime float
) DISTRIBUTE BY HASH(school);
36 语法规范 ‘! =’中间可以有空格 ‘! =’中间不能有空格 改写样例:
and order_source ! = 'all'
替换为
and order_source != 'all'

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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