0


mysql切换达梦数据库,常用语句转换和注意事项

mysql切换达梦数据库,常用语句转换和注意事项

达梦官方技术文档 链接直达,可以通过官方技术文档学习达梦数据库的相关知识

1.达梦中注意事项

  1. 字符串常量应使用单引号括起,关键字、对象名、字段名、别名等则使用双引号括起
  2. MySQL表字段与达梦数据库关键字冲突,比如comment,user,要用双引号括起
  3. group by后面必须加上SELECT后面所查询的所有除聚合函数之外的所有字段,而MySQL则不用,只需要加上需要分组的字段即可
  4. 达梦数据库不支持对自增列值赋值
  5. 达梦数据库在使用DISTINCT关键词去重时,查询字段包含大文本时,无法进行内容比较

2.mysql切达梦常用语句转换

MySQL切换达梦数据库时,对于一些常用的方法会有一些不同,上个项目在切换过程中遇到的一些常用的写法总结一下,即是巩固也希望对切达梦的小伙伴有一些借鉴。

更多的一些区别欢迎大家可以在评论区补充。

2.1 日期相关

1. 获取当前时间 now()和current_timestamp 转换为 SYSDATE2. 增加日期 DATE_ADD()/DATE_SUB() 转换为 dateadd()
用法示例:
MySQL中:DATE_ADD(date,INTERVAL1DAY)/DATE_SUB(date,INTERVAL1DAY);达梦中:dateadd(datepart,n,date)3. 计算日期差 DATEDIFF(date1, date2) 转换为 date1 - date2
用法示例:
MySQL中:datediff(date1, date2) 
达梦中:date2-date1

 4. 日期格式转换 STR_TO_DATE() 转换为 TO_DATE()
用法示例:
MySQL中:STR_TO_DATE(#{date1},'%Y-%m-%d')
达梦中:TO_DATE(#{date1},'%Y-%m-%d'),根据日期格式要求的不同或者转为TO_DATE(date1,'YYYY-MM-DD HH24:MI:SS')5. 日期格式的转换 DATE_FORMAT 转换为 TO_CHAR
用法示例:
YEAR()--->TO_CHAR(date,'YYYY')-- 获取年份
MONTH()--->TO_CHAR(date,'MM')-- 获取月份
DAY()--->TO_CHAR(date,'DD')-- 获取天

2.2 分组 group by

1.GROUPBY...WITHROLLUP 转换为 GROUPBYROLLUP()
用法示例:
MySQL中:GROUPBY project_attribute WITHROLLUP 将查询结果按指定字段分组,
并在结果中添加汇总行,方便查看分组数据的汇总情况
达梦中:GROUPBYROLLUP(project_attribute)

2.3 数值转换

FORMAT 转换为 CAST 
用法示例:
FORMAT(regist_num,2)AS registNum
换为   
CAST 函数可以将一个数据类型转换为另一个数据类型。你可以将字符型数据转换为数值型,并使用格式化选项指定小数位数。CAST(REPLACE(regist_num,',','')ASDECIMAL(19,2))AS registNum

2.4 字符串操作

1. 截取字符串 SUBSTRING(str, start, length)--->SUBSTR(str, start, length)2.GROUP_CONCAT() 转换为 LISTAGG()
用法示例:
MySQL中:GROUP_CONCAT(name SEPARATOR',')
达梦中:LISTAGG(DISTINCT name ,',')WITHINGROUP(ORDERBY name)
包括各种由此的变形,根据实际语法修改即可

 3.convert() 转换为 CAST()
用法示例:
MySQL中:convert(price,decimal(10,4))
达梦中:CAST(price ASDECIMAL(10,4))AS price

2.5 常用语法

1. 重要!!!带绑定参数的text类型不能用普通比较符运算,可以使用to_char/cast/convert/dbmsllob.substr等函数转为普通字符类型但要注意长度问题,也可以使用like来比较,TEXT_EQUAL函数就是专门用来比较大字段类型的文本内容,该函数判断相同内容返回1(true)否则返回0(false)。
用法示例:
MySQL中:D.ATTRIBUTE1= #{isWithout}达梦中:cast(D.ATTRIBUTE1as varchar)= #{isWithout}2.IF 转换为 CASEWHEN...ELSEEND
用法示例:
MySQL中:IF(d.DIC_CODEIS not NULL, p.CONFERENCE_DATE, p.CREATED_DATE)DESC 
达梦中:CASEWHEN d.DIC_CODEISNOTNULLTHEN p.CONFERENCE_DATEELSE p.CREATED_DATEENDDESC3.uuid() 换为RAWTOHEX(SYS_GUID())4. 批量插入更新 on duplicate key update 转换为 MERGEINTOTAGUSING()RESON()WHENMATCHEDTHENUPDATESET
用法示例:

MERGEINTO t_qa_message AS target
    USING(<foreach collection="entities" item="entity" separator="UNION ALL">SELECT
                #{entity.qaMessageId}ASQA_MESSAGE_ID,
                #{entity.qaId}ASQA_ID,
                #{entity.ANSWER_CONTENT}ASANSWER_CONTENT,</foreach>)AS source ON target.QA_MESSAGE_ID= source.QA_MESSAGE_IDWHENMATCHEDTHENUPDATESETQA_ID= source.QA_ID,IS_NEED_PROJECT_ANSWER= source.IS_NEED_PROJECT_ANSWER,ANSWER_CONTENT= source.ANSWER_CONTENTWHENNOTMATCHEDTHENINSERT(QA_MESSAGE_ID,QA_ID,ANSWER_CONTENT)VALUES(
            source.QA_MESSAGE_ID,
            source.QA_ID,
            source.ANSWER_CONTENT,)

参考文件

[1]【转】mysql转达梦路之坎坷
[2] mysql和达梦不同之处
[3] 达梦数据库和mysql常用语句及区别
[4] 浅谈达梦数据库与MYSQL数据库的差异

标签: 数据库 mysql

本文转载自: https://blog.csdn.net/weixin_43726448/article/details/138795945
版权归原作者 一枚小旺仔 所有, 如有侵权,请联系我们删除。

“mysql切换达梦数据库,常用语句转换和注意事项”的评论:

还没有评论