1> 命名需要加 as 关键字;
2> 别名不能加mysql自动生成斜单引号,中文别明不能加单引号;
3> 当mysql某个字段的类型为 tinyint时,且长度为1,迁移到金仓时,自动转换为 true 或 false;(需要讲tinyint改为2,才可以保持一样的数值,对应类型为Integer);
4> 计算时,需要将varchar类型转换为Decimal类型,才可以与1.000000023去加减乘除;
例如: cast(IF(score,0) as DECIMAL) * 0.10000000000000016
5> 使用 left join 时进行关联查询,每个联表后 用 on 连接 关联条件;不允许联表后用 on 关联所有不同表的关联条件;
6> 报错信息:Cause: com.kingbase8.util.KSQLException: ERROR: CASE types TEXT and NUMERIC cannot be matched
CASE WHEN 'string' is NULL THEN '--' Else IF ( ROUND( 0.0003, 2 ) = 0, 0.01::varchar, ROUND( 0.0003, 2 ) ) END AS 'alias'
// 前后都为字符串,类型需要保持一致
7>,伪列 (rownum)
SELECT * FROM ( SELECT t1.*, rownum - 1 orderNum //rownum-1 从 0开始,rownum 从1开始 FROM ( SELECT r.uid nameId, r.uid uid, //这个地方不允许别名与原字段一样 'company' AS LABEL // 常量命名需要加 AS 关键字 FROM risk_confilict_legal r LEFT JOIN company_graph_risk_analy p ON r.uid = p.pfr_id WHERE ( p.list_time BETWEEN '19901001' AND '20301031' OR list_time IS NULL ) ORDER BY IF ( LEFT ( r.valueone, 3 ) != LEFT ( r.valuetwo, 3 ), 0, 1 ) LIMIT 100000000 ) t1 ) result
8>,mysql :select 10 DIV 2;-》kingbase8:select 10 / 2;
9>,mysql:
UPDATE company_score cs, ( SELECT prvt_org_cde, IF ( ( 25+100 * score ) > 96, 96, ( 25+100 * score ) ) AS score FROM tencent_every_company_scores ) tencent SET cs.stmt_score = tencent.score WHERE tencent.prvt_org_cde = cs.company_name
Kingbase8:
UPDATE company_score cs SET cs.stmt_score = tencent.score FROM ( SELECT prvt_org_cde, IF ( ( 25+100 * (score::DECIMAL) ) > 96, 96, ( 25+100 * (score::DECIMAL) ) ) AS score FROM tencent_every_company_scores ) tencent WHERE tencent.prvt_org_cde = cs.company_name
或者:
UPDATE company_score cs
SET cs.stmt_score =(
SELECT IF((25 + 100 * (score::DECIMAL))> 96,96,(25 + 100 * (score::DECIMAL))) AS score
FROM tencent_every_company_scores
WHERE prvt_org_cde = cs.company_name
)
WHERE EXISTS(
SELECT 1 FROM tencent_every_company_scores
WHERE prvt_org_cde = cs.company_name)