达梦数据库适配过程中,主要需要兼容的,是sql语句中的json相关函数的适配,如果查询语句中,使用到了聚合函数,要对非聚合的字段,进行分组(在mysql数据库中,在此情况下,没有对分组做严格要求)
一.达梦数据库中对json相关函数的适配参照
MySQL:(JSON_SET函数)
【示例】
JSON_SET(ifnull(a.extra,'{}'),'$.ywlx',ifnull(a.ywlx,''),'$.nywlx',ifnull(a.nywlx,'')) extra
达梦:(jsonb_set函数)
【示例】
jsonb_set(jsonb_set(ifnull(a.extra,'{}'),'{ywlx}',ifnull(concat('"',a.ywlx,'"'),'""')),'{nywlx}',ifnull(concat('"',a.nywlx,'"'),'""')) extra
人大金仓:(jsonb_set函数)
说明:人大金仓数据库,使用jsonb_set函数时,需要将json数据的键值对进行数据转型处理
【示例】
jsonb_set(jsonb_set(ifnull(extra::JSONB,'{}'),'{ywlx}',ifnull(to_json(ywlx),'""')),'{nywlx}',ifnull(to_json(nywlx),'""')) extra
MySQL:(json_remove函数)
【示例】
extra = JSON_REMOVE(ifnull(extra, '{}'), CONCAT('$.',#{node}))
达梦:(jsonb_strip_nulls + jsonb_set函数)
说明:先将要移除的键值对中的value值,使用jsonb_set置为null,再使用jsonb_strip_nulls,移除value为null的键值对)
【示例】
extra = jsonb_strip_nulls(jsonb_set(ifnull(extra,'{}'),concat('{',#{node},'}'),'null',false))
人大金仓数据库:(jsonb_strip_nulls + jsonb_set函数)
说明:人大金仓数据库,使用jsonb_set函数时,需要将json对象的值,进行类型转换
【示例】
extra = jsonb_strip_nulls(jsonb_set(ifnull(extra::jsonb,'{}'),'{${node}}','null',false))
MySQL:(json箭头函数)
【示例】
select
id,label,value,category,pid,deleted
from
sys_dict
where
category = #{category}
order by
value -> '$.index'
asc
达梦(json_value函数)
【示例】
select
id,label,value,category,pid,deleted
from
sys_dict
where
category = #{category}
order by
json_value(value,'$.index')
asc
人大金仓
(json键值对只有一层路径的情况下,如{“name”:”zhangsan”} : json对象转换类型后,使用箭头函数)
【示例】
select
id,label,value,category,pid,deleted
from
sys_dict
where
category = #{category}
order by
value::jsonb ->> 'index'
(json键值对,有多层路径的情况下,如{“InfoDatas”:{“name”:”张三”}},使用json_extract_path_text函数)
【示例】
count(json_extract_path_text(json_extract_path_text(b.extra::jsonb,'changeLog')::jsonb,'rename')) AS manualRenameNum
MySQL:(json箭头函数,获取value为数组格式的键值对的值)
数据格式:{ “systemIds”: [“1574286870436925449”]}
【示例】
and extra -> '$.systemIds' like concat('%',#{param.systemId},'%')
达梦(json_query函数)
【示例】
and json_query(extra,'$.systemIds') like concat('%',#{param.systemId},'%')
人大金仓(json_extract_path_text 或json箭头函数)
and json_extract_path_text(extra::jsonb,'systemIds') like concat('%',#{param.systemId},'%')
二.MySQL中,有一个很重要的语法叫on duplicate key update
【MySQL】
insert into case_trial_member(id, case_id, user_code, sn, main, user_name, type)
value (#{id},#{caseId},#{userCode},#{sn},#{main}, #{userName},#{type})
ON DUPLICATE KEY UPDATE user_name=#{userName},main=#{main}, type =#{type}
【达梦数据库中,对此方法的适配如下】
MERGE INTO case_trial_member T1
USING(
select
#{caseTrialMember.id} id,
#{caseTrialMember.caseId} case_id,
#{caseTrialMember.userCode} user_code,
#{caseTrialMember.userName} user_name,
#{caseTrialMember.sn} sn,
#{caseTrialMember.main} main,
#{caseTrialMember.type} type
from dual
)T2 on(T1.case_id = T2.case_id and T1.user_code=T2.user_code)
WHEN NOT MATCHED THEN INSERT (id,case_id,user_code,user_name,sn,main,type)
VALUES (T2.id,T2.case_id,T2.user_code,T2.user_name,T2.sn,T2.main,T2.type)
WHEN MATCHED THEN UPDATE
SET T1.update_time=GETDATE()
【人大金仓数据库适配如下】
insert into directory_mapping(origin_directory_id,target_directory_id,mapping_name,case_id) values(
#{originDirectoryId},#{targetDirectoryId},#{mappingName},#{caseId})
ON CONFLICT (origin_directory_id,target_directory_id)
DO
UPDATE
SET target_directory_id=#{targetDirectoryId}
三.关于Mysql数据库中,update_time字段值自动更新的问题
【MySQL】
达梦和人大金仓基本上都是使用触发器去实现的
【达梦】
【人大金仓】
四.达梦数据库和人大金仓数据库,对MySQL数据库中一些表的虚拟列的适配
【达梦】
【人大金仓】
五.全文检索
【MySQL】
MySQL数据库的case_info表中有一个case_name_word字段,用于配合SQL中的MATCH语法做全文案件名称检索
对于此检索方式,达梦数据库和人大金仓数据库使用上,有所差别
【达梦】
【人大金仓】
六.MySQL和人大金仓数据库,均支持FIND_IN_SET函数,但是达梦数据库的函数方法中,没有此函数,因为只能自己创建一个同名函数,去实现该功能
参照网页:https://blog.csdn.net/zhangkaidsy/article/details/101053481
七.关于整数计算的问题
MySQL和人大金仓数据库,计算数字类型的值时,整数除以整数是,如果结果是一个非整数形式的分数,则以小数形式展示,如:1/2=0.5 ,但是达梦是以整数的形式展示的,这样可能会造成数据上的错误,对此,达梦的解决办法如下
【MySQL】
【人大金仓】
【达梦】
先查询模式,如果para_value值为0,则向下取整
此时需要将para_value值改为1,再查询,就是精确到小数
注意,修改了值后,需要重启达梦数据库,才能使配置生效,因此慎用
八.关于引号转义的问题
MySQL和达梦数据库,引号转义用 \ 符,人大金仓 引号转义 用单引号(英文字符)
九.人大金仓时间函数及其相关 专题
时间格式的数据,如果想要获得时分秒的精确数据,则需要将类型转换为timestamptz类型,否则只能拿到年月日的信息,时分秒的信息为00:00:00
时间戳格式的数据,转换为年月日
获取当前系统时间函数
作者:hzw 创建时间:2024-01-31 17:15
最后编辑:hzw 更新时间:2024-11-15 23:02
最后编辑:hzw 更新时间:2024-11-15 23:02