欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达梦数据库迁移记录

程序员文章站 2022-03-03 20:15:31
...

达梦数据库适配经验

和mysql数据库相比函数的替代

  1. str_to_date
    STR_TO_DATE(str,format)函数是将时间格式的字符串(str),按照所提供的显示格式(format)转换为DATETIME类型的值。
STR_TO_DATE('2020-09-17 16:27:30','%Y-%m-%d %H:%i:%s')

在达梦数据库中可用to_date替代

TO_DATE('2020-09-17 16:27:30','YYYY-MM-DD HH24:MI:SS')
  1. group_concat
    作用就是以某字段分组,将某字段的值打印在一行,以符号分隔(默认逗号)
    group_concat( [DISTINCT] 要连接打印的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] ),如
select id,group_concat(name order by name desc separator ';') from aa

separator和‘;’可以不写,默认是以‘,’分隔。
达梦中以LISTAGG替代group_concat,方式如

select id,LISTAGG(name,';') within GROUP(order by name) 别名 from aa

在达梦中不再有separator ,起别名时不再加as。
达梦还有vm_concat可以替代

  1. substring_index
    按照关键字截取字段substring_index(被截取字段,关键字,关键字出现的次数), 如
select substring_index("bl.jb.not",".",2) as ss from mytable;
-- 结果 bl.jb
select substring_index("bl.jb.not",".",-1) as ss from mytable;
-- 结果 not
	达梦有提供substr和substring,但功能好像不一样。
  1. UUID
    UUID可以用guid和newid替代。
  2. convert(value,type)
    达梦中的convert和mysql的使用方式是相反的。
    换为convert(type,value)

    mysql中convert(uid,SIGNED)
    达梦中convert(NUMERIC,uid)
    mysql和达梦的数据类型不一定一致,比如达梦中没有SIGNED类型
  3. FIND_IN_SET
    达梦数据库没有FIND_IN_SET
  4. @不支持
SELECT @p := NULL, @r := 0
SELECT NULL AS p, 0 AS r
  1. 循环语法替代
    mysql:
    WHILE i<=1000000 DO
    INSERT INTO my_owner_table(ID,Name,Phone) VALUES(i,i,123456);
    SET i=i+1;
    END WHILE; 不适配
    达梦:
    do 改为 loop WHILE i<=1000000 loop
    INSERT INTO my_owner_table(ID,Name,Phone) VALUES(i,i,123456);
    SET i=i+1;
    END loop;

注意事项

  • 在达梦中关键字不能乱用,如:对字段起别名,别名若为关键字,那么查出来的字段名会是大写的关键字。向前端页面传时也是大写的,前端也要用大写的接收,否则会渲染不了字段下的数据。