人大金仓kingbase数据迁移及使用问题

您所在的位置:网站首页 linux连接人大金仓数据库 人大金仓kingbase数据迁移及使用问题

人大金仓kingbase数据迁移及使用问题

2023-03-30 04:59| 来源: 网络整理| 查看: 265

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) 复制代码


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3