国产数据库⼈⼤⾦仓sql与mysql对⽐
反引号与双引号
kingbase不⽀持mysql中的反引号与其相对应的是双引号
mysql中的语法:`name`
kingbase中的语法:“name”
正则表达式
kingbase 正则表达式与mysql中的语法不通:
mysql 中的语法:`name` regexp ‘^b.’ kingbase
中的语法:regexp_like(“name”,’^b.’,‘i’)
字符串包裹
kingbase 与 mysql 字符串差别 mysql中可以使⽤单引号与双引号包裹字符串 kingbase只能使⽤单引号包裹
mysql 中的语法:insert into users(name,context) values(‘name’,“context”)
kingbase 中的语法:insert into users(name,context) values(‘name’,‘context’)
mysql下载add produce类型转换:
kingbase不⽀持类型的隐式转换不通类型中必须⼿动转换
mysql ⽀持类型的隐式转换
GROUP_CONCAT:
kingbase中与mysql的GROUP_CONCAT 相同的⽅法是 wm_concat ⽤法和参数都⼀样
replace into:
mysql 中 replace into 是根据唯⼀约束进⾏查如果有数据删除并且插⼊新数据,没有则直接插⼊数据。
kingbase 中没有 replace into 需要使⽤ merge into 替换。其语句执⾏结果是:根据输⼊的字段作为条件如果含有则修改,没有则插⼊
具体替换件如下sql:
merge into “account” a using (select ‘acco0004’ as account_code) b on (a.account_code = b.account_code)
when matched then update set “name”= ‘hello world’
when not matched then insert (“account_code”,“name”) values (‘acco0004’,‘hello’)
解释:
1.“account” 为源表名(要被修改数据的表)
2.(select ‘acco0004’ as account_code) b 判断重复的虚拟表其中 ‘acco0004’ 为判断依据(根据实际状况替换) account_code 为⾃定义字段名可根据实际状况修改
< (a.account_code = b.account_code) 过滤条件如果 account 表中含有虚拟表b中 acco0004 的值则进⾏修改操作 account_code 可根据实际状况修改可使⽤and连接多个字段但字段必须有唯⼀约束
4.update set “name” = ‘malong’ 如果有则需改这⾥只修改了 name 可根据增加替换
5.insert (“account_code”,“name”) values (‘acco0004’,‘bailong’) 如果没有则进⾏插⼊
多字段条件:
merge into “account” a using (select ‘acco0001’ as account_code,‘keyc0001’ as key_code) b on (a.account_code = b.account_code anda.key_code = b.key_code)
when matched then update set “name” = ‘hello world’
when not matched then insert (“account_code”,“name”,“key_code”) values (‘acco0001’,‘hello’,‘keyc0001’)
insert ignore into:
mysql 的 insert ignore into 没有数据则插⼊,有则忽略。
kingbase 没有 insert ignore into 可替换为以下sql:
语句跟replace into差不多只是缺少了修改:
merge into “account” a using (select ‘acco0002’ as account_code) b on
(a.account_code = b.account_code) when not matched then insert
(“account_code”,“name”) values (‘acco0002’,‘hello’)
DATE_FORMAT :
kingbase 中的to_char函数与mysql中date_format对应,但第⼆位的参数有所不同
FIELD:
kingbase中没有 field 函数要实现此形式提供以下⽰例参考:
mysql 语句:
SELECT * FROM account ORDER BY FIELD (`name`,‘suyoupeng’,‘liushaopeng’,‘huxue’,‘hongjinbao’,‘malong’)
kingbase 语句:
SELECT * FROM account ORDER BY case when name = ‘suyoupeng’ then ‘0’
when name = ‘liushaopeng’ then ‘1’ when name = ‘huxue’ then ‘2’ when
name = ‘hongjinbao’ then ‘3’ when name = ‘malong’ then ‘4’ else name
end ,name
Tips:其中 then 后⾯的值需要根据字段 name 的类型进⾏调整, kingbase 不⽀持隐式数据转换
concat:
由于kingbase的双引号代表包含字段如果想让concat以单引号包含字符可以使⽤以下语法也兼容mysql
SELECT CONCAT(’’’’,‘bailong’,’’’’)
group by:
kingbase 使⽤SQL3以前的标准所以在 group by 与mysql的语法相同:
mysql 中group by ⽤法:
SELECT id,`name`,age,birthday FROM account WHERE age BETWEEN 20 AND 50
GROUP BY `name` ORDER BY birthday
如果在kingbase中也达到同样的结果请转换为以下的sql
select id,name,age,birthday from casecheck.account where id in (select
max(id) from casecheck.account where age between 20 and 50 group by
name ) order by birthday desc
解释:
在kingbase使⽤group by 必须将显⽰的字段多键⼊到group by中。这样的话就导致了数据的不准确
在上⾯的sql语句中 select max(id) from casecheck.account where age between 20 and 50 group by name 如果 id 不使⽤聚合函数 max 包裹将会报错,
可能的原因是 group by name字段以后⼀个name 对应多个id 此时sql引擎不知道应该显⽰哪个,使⽤max聚合函数后 sql 就取最⼤的id的name了。
得到所有符合条件的id后,再以此做为条件重新检索数据表。
INET_ATON:
mysql 使⽤例⼦:
SELECT INET_ATON(‘192.168.1.90’) AS ip
kingbase 不⽀持 INET_ATON函数⽤以下sql替换
select
to_number(regexp_replace(ip, ‘([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})’, ‘\1’)) * 16777216 +    to_number(regexp_replace(ip, ‘([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})’, ‘\2’)) * 65536 +
to_number(regexp_replace(ip, ‘([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})’, ‘\3’)) * 256
to_number(regexp_replace(ip, ‘([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})’, ‘\4’)) as ip_number    from (SELECT ‘192.168.1.90’ AS ip)
数据导⼊:
应该分为两步操作
⾸先导⼊表结构后在导⼊数据同时导⼊可能索引创建不成功
导⼊表结果如下图:
在这⾥插⼊图⽚描述
加⼊json类型映射:
在这⾥插⼊图⽚描述
结构导⼊完毕再执⾏数据导⼊(如下图):
在这⾥插⼊图⽚描述
报错问题定位:
在这⾥插⼊图⽚描述
导⼊数据报错合集:
ERROR: invalid byte sequence for encoding “UTF8”: 0x00
tips:含有中⽂的数据都有可能出现此错误
解决⽅式如下:
在源数据库表中到报错数据
SELECT * FROM law_item WHERE text LIKE CONCAT("%",CHAR(0),"%");
在这⾥插⼊图⽚描述
重新以对应的编码输⼊⽂字即可。
没有到数据类型:json请增加数据类型映射
在这⾥插⼊图⽚描述
加⼊json类型映射即可。
tips:在数据导⼊中已有解决办法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。