DM 和 MySQL 的一些异同

单双引号

  • 字段名取别名,MySQL 中使用单引号,达梦中使用双引号,没有使用别名的情况下字段名有可能会自动大写。
  • 如果表中的字段名和关键字重复,字段名需使用双引号,使用双引号时查询字段名必须和表中字段名大小写一致
  • 达梦中 where 条件查询的字段可以不加双引号,只有需要指定字段大小写时才使用
  • 达梦不支持 \ ` 字符(英文状态 esc 下面的按键)
1
2
--表中如果是小写,双引号中字段必须是小写,如果表中是大写,此处双引号中 value 必须大写
select a."value" from userTable a

函数

  • 达梦中没有 find_in_set 函数

  • 使用分组时,查询的字段必须出现在 group by 中(聚合函数除外)

    1
    2
    --查询年龄为18的人,并按学号分组(想要显示姓名字段,必须在group by后面加上name字段)
    select a.student_id,a.name from userTable a where age='18' group by a.student_id,a.name
  • 达梦中没有 group_concat 函数,需要使用 WM_CONCAT 函数代替,WM_CONCAT 函数只有一个参数,不能指定分隔符,不能拼接其他字段

    1
    select WM_CONCAT(a.name) from userTable a

    WM_CONCAT 字段内容太长时会超出字符串长度,需要cast函数转换类型

    1
    select cast(WM_CONCAT(a.name) as varchar2) as "names" from userTable a
  • CONVERT 函数与 MySQL 的使用方式是相反的

    1
    2
    3
    4
    --MySQL
    select CONVERT(a.age, varchar2) as 'age' from userTable a
    --达梦
    select CONVERT(varchar2,a.age) as "age" from userTable a
  • date_format 改为 to_date

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- MySQL:
    convert(Date,DATE)
    date_format(Date,'%Y-%m-%d %H:%i:%s')
    -- 达梦:
    to_char(Date,'YYYY-MM-DD')
    to_char(Date,'YYYY-MM-DD HH24:MI:SS')
    to_date(Date,'YYYY-MM-DD HH24:MI:SS')
    date_format(Date,'%Y-%m-%d %H:%i:%s')
    -- 人大金仓:
    to_date(Date,'YYYY-MM-DD')
    to_char(Date,'YYYY-MM-DD HH24:MI:SS')=>转换出的类型是varchar型,不能与时间类型的相比较,可以两个都使用to_char转换的相比较
  • 日期类型不能直接和字符类型的日期比较大小,需要用 date_format 转换后使用

  • SUBDATE() 改成 DATE_SUB() 函数

  • ADDDATE() 改成 DATE_ADD() 函数

  • distinctorder by 同时使用时,排序的字段必须出现在 distinct 关键字后面


DM 和 MySQL 的一些异同
https://flepeng.github.io/042-国产-DM-达梦数据库-DM-和-MySQL-的一些异同/
作者
Lepeng
发布于
2024年3月6日
许可协议