金仓数据库KingBase8迁移SQL问题汇总


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)

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM