---
title: MySQL迁移至DM8常见SQL兼容性问题
description: "在MySQL中若使用到DATE_FORMAT()函数，可以在DM数据库中使用to_char或to_date函数改写。例如："
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/portingadvisor/systemmigration/DevKit_Porting_0061.html
sourcePath: /source/zh/kunpengdevps/portingadvisor/systemmigration/DevKit_Porting_0061.html
indexId: d4e98135a392c530b1dabc7cedc150de9343e00063cf3d3f06f0da3fb64f304f79
---
# MySQL迁移至DM8常见SQL兼容性问题

#### to_char或to_date函数替代DATE_FORMAT()函数

在MySQL中若使用到DATE_FORMAT()函数，可以在DM数据库中使用to_char或to_date函数改写。例如：

- MySQL写法：select date_format(sysdate(), '%Y年%m月') from dual
- DM写法：select translate(to_char(sysdate, 'yyyy-mm#'),'-#','年月') from dual


#### convert函数使用规则

在MySQL中convert()函数中value在前，type在后，DM数据库中相反，若使用convert()函数，请修改参数顺序。例如：

- MySQL写法：CONVERT(CASE WHEN TEMP_STA.c_data_value THEN NULL ELSE TEMP_STA.c_data_value END, SIGNED) AS "ONLINEUSER"
- DM写法：CONVERT(INTEGER,CASE WHEN TEMP_STA.c_data_value THEN NULL ELSE TEMP_STA.c_data_value END) AS "ONLINEUSER"


#### cast函数使用规则

DM中cast()用法与MySQL一致，但使用效果不同，例如MySQL中对于数值类型的value转char类型没有限制，DM中则存在限制。可将cast(数值类型的value as char)转换为cast(数值类型的value as varchar)，对于unsigned类型可以根据实际情况做对应调整或确定是否有必要进行转换。


#### DM中使用TIMESTAMPADD替代date_add函数

在MySQL中若采用date_add函数对添加时间间隔的表达式进行求值，可在DM中使用TIMESTAMPADD函数进行替代。例如：

- MySQL写法：select DATE_ADD(sysdate(), INTERVAL 1 YEAR);
- DM写法：select TIMESTAMPADD(SQL_TSI_YEAR, 1,sysdate());


#### interval关键字的使用

在MySQL中若使用类似interval 1 year的时间间隔表达式，在达梦数据库中，interval关键字后的正数需添加单引号，如interval '1' year，对于负数需改写，如interval '-1' year。
