ToB企服应用市场:ToB评测及商务社交产业平台

标题: mysql切换达梦数据库,常用语句转换和注意事项 [打印本页]

作者: 去皮卡多    时间: 2024-8-29 06:52
标题: mysql切换达梦数据库,常用语句转换和注意事项
达梦官方技术文档 链接直达,可以通过官方技术文档学习达梦数据库的相干知识
1.达梦中注意事项

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

MySQL切换达梦数据库时,对于一些常用的方法会有一些差别,上个项目在切换过程中碰到的一些常用的写法总结一下,便是巩固也希望对切达梦的小伙伴有一些借鉴。
更多的一些区别欢迎大家可以在评论区增补。
2.1 日期相干

  1. 1. 获取当前时间 now()和current_timestamp 转换为 SYSDATE
  2. 2. 增加日期 DATE_ADD()/DATE_SUB() 转换为 dateadd()
  3. 用法示例:
  4. MySQL中:DATE_ADD(date, INTERVAL 1 DAY)/DATE_SUB(date, INTERVAL 1 DAY);
  5. 达梦中:dateadd(datepart,n,date)  
  6. 3. 计算日期差 DATEDIFF(date1, date2) 转换为 date1 - date2
  7. 用法示例:
  8. MySQL中:datediff(date1, date2)
  9. 达梦中:date2-date1
  10. 4. 日期格式转换 STR_TO_DATE() 转换为 TO_DATE()
  11. 用法示例:
  12. MySQL中:STR_TO_DATE(#{date1},'%Y-%m-%d')
  13. 达梦中:TO_DATE(#{date1}, '%Y-%m-%d'),根据日期格式要求的不同或者转为TO_DATE(date1,'YYYY-MM-DD HH24:MI:SS')
  14. 5. 日期格式的转换 DATE_FORMAT 转换为 TO_CHAR
  15. 用法示例:
  16. YEAR()--->TO_CHAR(date, 'YYYY')-- 获取年份
  17. MONTH()--->TO_CHAR(date, 'MM')-- 获取月份
  18. DAY()--->TO_CHAR(date, 'DD')-- 获取天
复制代码
2.2 分组 group by

  1. 1. GROUP BY...WITH ROLLUP 转换为 GROUP BY ROLLUP()
  2. 用法示例:
  3. MySQL中:GROUP BY project_attribute WITH ROLLUP 将查询结果按指定字段分组,
  4. 并在结果中添加汇总行,方便查看分组数据的汇总情况
  5. 达梦中:GROUP BY ROLLUP(project_attribute)
复制代码
2.3 数值转换

  1. FORMAT 转换为 CAST
  2. 用法示例:
  3. FORMAT(regist_num,2) AS registNum
  4. 换为   
  5. CAST 函数可以将一个数据类型转换为另一个数据类型。你可以将字符型数据转换为数值型,并使用格式化选项指定小数位数。CAST(REPLACE(regist_num, ',', '') AS DECIMAL(19, 2)) AS registNum
复制代码
2.4 字符串利用

  1. 1. 截取字符串 SUBSTRING(str, start, length)--->SUBSTR(str, start, length)
  2. 2. GROUP_CONCAT() 转换为 LISTAGG()
  3. 用法示例:
  4. MySQL中:GROUP_CONCAT(name SEPARATOR ',')
  5. 达梦中:LISTAGG(DISTINCT name , ',') WITHIN GROUP (ORDER BY name)
  6. 包括各种由此的变形,根据实际语法修改即可
  7. 3. convert() 转换为 CAST()
  8. 用法示例:
  9. MySQL中:convert(price,decimal(10,4))
  10. 达梦中:CAST(price AS DECIMAL(10,4)) AS price
复制代码
2.5 常用语法

  1. 1. 重要!!!带绑定参数的text类型不能用普通比较符运算,可以使用to_char/cast/convert/dbmsllob.substr等函数转为普通字符类型但要注意长度问题,也可以使用like来比较,TEXT_EQUAL函数就是专门用来比较大字段类型的文本内容,该函数判断相同内容返回1(true)否则返回0(false)。
  2. 用法示例:
  3. MySQL中:D.ATTRIBUTE1 = #{isWithout}
  4. 达梦中:cast(D.ATTRIBUTE1 as varchar) = #{isWithout}
  5. 2. IF 转换为 CASE WHEN...ELSE END
  6. 用法示例:
  7. MySQL中:IF(d.DIC_CODE IS not NULL, p.CONFERENCE_DATE, p.CREATED_DATE) DESC
  8. 达梦中:CASE WHEN d.DIC_CODE IS NOT NULL THEN p.CONFERENCE_DATE
  9.             ELSE p.CREATED_DATE
  10.           END DESC
  11. 3. uuid() 换为RAWTOHEX(SYS_GUID())
  12. 4. 批量插入更新 on duplicate key update 转换为 MERGE INTO  TAG USING()RES ON() WHEN MATCHED THEN   UPDATE  SET
  13. 用法示例:
  14. MERGE INTO t_qa_message AS target
  15.     USING (
  16.         <foreach collection="entities" item="entity" separator="UNION ALL">
  17.             SELECT
  18.                 #{entity.qaMessageId} AS QA_MESSAGE_ID,
  19.                 #{entity.qaId} AS QA_ID,
  20.                 #{entity.ANSWER_CONTENT} AS ANSWER_CONTENT,
  21.         </foreach>
  22.     ) AS source ON target.QA_MESSAGE_ID = source.QA_MESSAGE_ID
  23.     WHEN MATCHED THEN
  24.         UPDATE SET
  25.             QA_ID = source.QA_ID,
  26.             IS_NEED_PROJECT_ANSWER = source.IS_NEED_PROJECT_ANSWER,
  27.             ANSWER_CONTENT = source.ANSWER_CONTENT
  28.     WHEN NOT MATCHED THEN
  29.         INSERT (QA_MESSAGE_ID, QA_ID, ANSWER_CONTENT)
  30.         VALUES (
  31.             source.QA_MESSAGE_ID,
  32.             source.QA_ID,
  33.             source.ANSWER_CONTENT,
  34.         )
复制代码
参考文件

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4