kingbase(单引号空值)判断失效
字符串判空问题,金仓直接把空字符串当成null,这样在sql里使用 a = ''判断空就会有问题,需要改一下数据库data目录下的kingbase.conf文件;添加 参数ora_input_emptystr_isnull=off 重启数据库 生效
ora_input_emptystr_isnull=off
无效的编码序列UTF8
kingbase.conf增加 ignore_char_null_check=true 处理完成后注释掉
ignore_char_null_check=true
MySql数据迁移到金仓后
MYSQL 中 field() 函数,可以用来对SQL中查询结果集进行指定顺序排序,不在其中的放在最前面。 KINGBASE 中可用函数 decode() 来满足指定顺序排序 。
-- MYSQL
SELECT t.kid, t.audit_state FROM t_dx_capital_allocated t WHERE
t.YEAR = '2020' AND t.del_flag = 1 ORDER BY
FIELD( t.audit_state,-2,-3 ) DESC, t.update_time DESC LIMIT 20
-- KINGBASE
SELECT t.kid, t.audit_state FROM t_dx_capital_allocated t WHERE
t.YEAR = '2020' AND t.del_flag = 1 ORDER BY
decode( t.audit_state, -3,1,-2, 2 ), t.update_time DESC LIMIT 20
MYSQL中GROUP_CONCAT()函数可以拼接字段为字符串。 KINGBSE中可以用String_agg()替换。
SELECT GROUP_CONCAT('%', t.id separator ';') FROM `score` t;
SELECT String_agg(CONCAT('%',C1), ';' ) FROM TABLE_NAME;
if()函数可用case when来代替:
COUNT( CASE WHEN t1.level = 'grade-001' THEN 1 ELSE NULL END ) AS sbjNum,
COUNT( CASE WHEN t1.level = 'grade-002' THEN 1 ELSE NULL END ) AS dsjNum,
COUNT( CASE WHEN t1.level = 'grade-003' THEN 1 ELSE NULL END ) AS xcjNum,
COUNT( CASE WHEN t1.level = 'grade-004' THEN 1 ELSE NULL END ) AS qtNum
IFNULL函数没有,需要替换为NVL() FIELD函数没有,需要替换为DECODE()
FIELD(t.audit_state,-2,-3) DESC,t.update_time DESC
decode( t.audit_state, -3,1,-2, 2 ),t.update_time DESC
group by中没有的字段需要转换:
SUBSTRING_INDEX(group_concat(lll.adminAreaId), ',', 1) AS adminAreaId,
转成大写:
CAST(SUBSTRING_INDEX(group_concat(lll.totalInvestAmount), ',', 1) AS NUMBER(15,2)) AS totalInvestAmount
日期格式:
to_char(CAST(TBDateTime AS TIMESTAMP), 'yyyy-mm') >= '2020-01'
varchar转int(字符串转数值)
to_number(attendEntNumberCloud)