首页 > 数据库 >MYSQL数据库转DM达梦数据库函数替换及注意事项

MYSQL数据库转DM达梦数据库函数替换及注意事项

时间:2023-07-03 15:36:37浏览次数:46  
标签:sku DM 示例 -- 数据库 favorite MYSQL select

1、调整 IF函数为 case 函数

MYSQL:  IF(conditionvalue_if_truevalue_if_false

if(a.class_sort_code = '0301',(select group_concat(sku_attr_id) sku_Attr from a_sku_attr_rela WHERE model_id = a.model_id order by sku_attr_id),'') sku_attr

  DM:    case when  condition then value_if_true else  value_if_false end  
CASE WHEN a.class_sort_code = '0301' THEN (select wm_concat(sku_attr_id) sku_Attr from a_sku_attr_rela WHERE model_id = a.model_id order by sku_attr_id) ELSE '' END sku_attr

2、调整聚合函数 GROUP_CONCAT 为  wm_concat  (注 : 直接替换即可)

MYSQL:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

  示例-表A :select name ,age,sex ,favorite from student      ---操作合并示例  favorite 字段  【favorite 字段值:1、篮球,2、足球,3、篮球,4、游泳】

    MYSQL: select Group_Concat(favorite) from student where name='zhangsan';       ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,篮球,游泳

    去重:select Group_Concat(DISTINCT  facorite) from student where name='zhangsan';   ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,游泳

    去重后以【;】连接:select Group_Concat(DISTINCT  facorite SEPARATOR ';')  from student where name='zhangsan'; ----最终结果 favorite 中字段以【;】 连接 结果示例:篮球;足球;游泳

DM  WM_COUNT

示例(以MySQL中sql表示例):select name ,age,sex ,favorite from student      ---操作合并示例  favorite 字段  【favorite 字段值:1、篮球,2、足球,3、篮球,4、游泳】

    DM: select WM_Concat(favorite) from student where name='zhangsan';       ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,篮球,游泳

    去重:select WM_Concat(DISTINCT  facorite) from student where name='zhangsan';   ----最终结果 favorite 中字段以【,】 连接 结果示例:篮球,足球,游泳

    去重后以【;】连接:select  replace(WM_Concat(DISTINCT  facorite),‘,’,‘,’  )from student where name='zhangsan'; ----最终结果 favorite 中字段以【;】 连接 结果示例:篮球;足球;游泳

 

备注 还有另一种方式可以做到上述效果

 DM    listagg

字符串拼接函数,由于wm_concat是只能以逗号结尾进行分割,在实际应用中有些许不变,因此又写了一个函数能够灵活变通。

格式:<LISTAGG>(<参数>[,<参数>]) WITHIN GROUP (<ORDER BY 项>)

select
    TEMPLATE_ID,
    listagg(template_content,';') WITHIN  group (order by TEMPLATE_ID)
    from SMS_TEMPLATE_ITEM
group by TEMPLATE_ID;

3、时间计算函数  DATE_ADD()

--MYSQL

select DATE_ADD(sysdate(), INTERVAL 1 YEAR);
--2024-07-03 14:57:54
select DATE_SUB(sysdate(), INTERVAL 1 YEAR);
--2022-07-03 14:57:54

select translate(to_char(sysdate(), 'yyyy-mm#'),'-#','年月')
--2023年07月

SELECT   date_format(now(),'%Y-%m-%d')  
-- 2023-07-03
 

--DM

DATEADD(datepart,n,date): 向指定的日期date加上n个datepart指定的时间段

ADD_DAYS(data,n)  date是日期类型(DATE)或时间戳类型(TIMESTAMP),返回值为日期类型(DATE)。     +n天  : ADD_MONTHS(date,n)、 ADD_WEEKS(date,n)、

select TIMESTAMPADD(SQL_TSI_YEAR,1,sysdate());
-- 时间日期计算 2024-07-03 14:57:56.000000

select TIMESTAMPSUB(sysdate(), INTERVAL 1 YEAR);
-- 时间日期计算 2022-07-03 14:57:54
SELECT   date_format(now(),'%Y-%m-%d')  
-- 时间格式化 2023-07-03

select DATEDIFF( DAY ,sysdate(),'2024-05-01');
-- 返回时间区间 303

 

4、DM的convert()函数中的type在前, value在后,而MySQL数据库中convert()函数则恰恰相反

建议用 cast 用法基本一致;记得检查数据转换前的类型与后续类型是否可以互转

5、分析函数有 distinct 的时候,不允许 order by 一起使用;

6、DM数据库 字段/表名称用 ""   不允许 `` 且  格式化时指定格式用 ''

 

 

 参考网址:

达梦官网:  达梦技术文档 (dameng.com)

字段列转行及去重: MySQL、DM 行转列及字段去重(Group_Concat()) - 天為 - 博客园 (cnblogs.com)

DM时间函数: (213条消息) DM日期时间函数_dm时间段拆分_zcn126的博客-CSDN博客

 

标签:sku,DM,示例,--,数据库,favorite,MYSQL,select
From: https://www.cnblogs.com/jiannanchun/p/17522950.html

相关文章

  • 数据库
    1.关系型数据库mysqlsqlserveroraclepostgresql2.非关系型数据库redis1、Redis数据库与接口缓存2、Redis缓存穿透,缓存击穿,缓存雪崩原因与解决方案3、Redis哨兵模式集群高可用esMongoDBHBaseNeo4j3.时序数据库InfluxDBpython操作InfluxDB......
  • bartender配数据库链接
          ......
  • 数据库中用户删除不掉总是报错,依赖如何处理干净?
    摘要:本文主要介绍如何进行用户的各种依赖识别与清理,并简单介绍下推荐的权限管理方式。本文分享自华为云社区《GaussDB(DWS)用户删除不掉时候总是报错,依赖如何处理干净?》,作者:Malick。数据库的使用中,有时会遇到某些用户离职,或者角色变更时,要对其账号进行销户,权限进行回收等操作......
  • mysql 配置主从复制
    推荐编译安装,但是太麻烦了,所以直接docker安装。参考https://blog.csdn.net/abcde123_123/article/details/106244181https://www.cnblogs.com/songwenjie/p/9371422.html拉取镜像推荐使用mysql5.7dockerpullmysql:5.7.39启动两个服务https://zhuanlan.zhihu.com/......
  • MySQL数据迁移
    前言在进行迁移时,源mysql的配置和目标mysql的配置应尽量保持一致迁移所有数据库迁移前,源端有以下数据库:迁移前,目标端有以下数据库目标端是刚安装好的mysql,默认就有上图中的4个库,源端比目标端多了一个dan库在源端备份所有数据库[root@target_pcdatabasefile]# mysql......
  • Mysql基础篇(四)之事务
    一.事务简介事务是一组操作的集合,它是一个不可分隔的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。就比如:张三给李四转账1000块钱,张三银行账户的钱减少了1000,而李四银行账户的钱要增加1000。这一组操作就必须在一......
  • 达梦数据库 表被锁的处理办法
    1、查看锁语句SELECT*FROMV$LOCKWHEREBLOCKED='1'; 字段说明:【ADDR 】列表示锁的内存地址;【TRX_ID 】列表示锁所属的事务ID;【LTYPE 】列表示锁的类型,可能是OBJECT(对象锁)或者TID(TID锁);【LMODE】列表示锁的模式,可能的取值有S(共享锁)、X(排他......
  • ASL芯片CS5466方案设计|集睿致远CS5466代理商|Type-c转HDMI电路原理
    CS5466作为ASL集睿致远新推出的高性能Type-CtoHDMI2.1协议转换器,可以通过HDMI输出端口作为TMDS或FRL发射机进行操作。CS5466适配于多个配件市场和现实应用主板,例如:主板,显示端口,扩展坞等。CS5266还配备了最高级别的HDCP嵌入式秘钥,能够安全传输受保护的内容,作为集睿致远ASL的一......
  • 数据库与数据仓库
    数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(DecisionSupport)。它出于分析性报告和决策支持目的而创建。企业中一般先有数据库,然后有数据仓库,可以没有数据仓库,但是不能没有数据库。数据仓库不是大型的数......
  • Linux下轻松修改MySQL/MariaDB的Root密码
    如果你是第一次安装MySQL或MariaDB,你可以执行mysql_secure_installation 脚本来实现基本的安全设置。其中的一个设置是数据库的root密码——该密码必须保密,并且只在必要的时候使用。如果你需要修改它(例如,当数据库管理员换了人——或者被解雇了!)。修改MySQL或......