反引號與雙引號
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’)
類型轉換:
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 為自定義字段名 可根據實際狀況修改
3.on (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:在數據導入中已有解決辦法