达梦数据库中如何改写MySQL order by in() 语法

本文介绍了如何在达梦数据库中通过case语句实现类似MySQL的orderby子句条件排序,以筛选type为2和3的记录并调整其在结果集中的位置。教程以实际SQL查询和达梦社区资源为参考。

MySQL数据库中有一种特殊的语法,order by if() 和order by in(),可以在order by子句中加入过滤条件,将符合条件的数据放到结果集的最前面或者最后面,那么在达梦数据库中该如何做呢?

create table test_in(id int,type int);

insert into test_in values(1,1);
insert into test_in values(2,2);
insert into test_in values(3,2);
insert into test_in values(4,3);
insert into test_in values(5,4);
insert into test_in values(6,6);
insert into test_in values(7,5);
insert into test_in values(8,7);

--MySql语法把 type 为2和3的值放到结果集的最前面
select * from test_in order by type in(2,3);  


--达梦数据库改写方法,order by子句中加入case语句来做条件判断
select
        id,
        type
from
        test_in
order by
        case when type in(2, 3) then 0 else 1 end,
        type

更多资讯请上达梦技术社区了解: https://eco.dameng.com

在将达梦数据库的 SQL 脚本转换为 MySQL 兼容格式时,需要注意两者在语法、函数、关键字等方面的差异。以下是一些主要的转换方法和注意事项: ### 达梦数据库 SQL 脚本转换为 MySQL 兼容格式的方法 1. **字段名和表名的引号替换** 达梦数据库使用双引号 `"` 来包裹字段名和表名,而 MySQL 使用反引号 `` ` ``。因此,需要将所有字段名和表名的双引号替换为反引号。 例如: ```sql SELECT "id", "name" FROM "users"; ``` 应修改为: ```sql SELECT `id`, `name` FROM `users`; ``` 2. **VARCHAR 类型长度调整** 达梦数据库的 `VARCHAR` 类型长度受 `LENGTH_IN_CHAR` 参数控制,而 MySQL 的 `VARCHAR` 按字符长度计算。如果达梦数据库中 `VARCHAR` 是按字节长度定义的,需要根据字符集(如 UTF-8)调整长度。例如,`VARCHAR(255)` 在达梦中可能只能存储 85 个中文字符,而在 MySQL 中可存储 255 个字符。 如果达梦数据库版本不支持 `LENGTH_IN_CHAR`,可以考虑使用 `NVARCHAR` 类型,再转换为 MySQL 的 `VARCHAR` 类型[^1]。 3. **数据类型替换** 达梦数据库中不支持 `UNSIGNED` 属性,而 MySQL 支持。因此,达梦中的 `INT` 类型如果用于表示非负整数,应转换为 MySQL 的 `INT UNSIGNED`。此外,达梦不支持 `INT` 类型带长度参数,而 MySQL 支持,如 `INT(11)`,需要根据实际需求调整。 4. **GROUP BY 语句调整** 达梦数据库要求 `SELECT` 列必须与 `GROUP BY` 列一致,而 MySQL 允许 `SELECT` 列与 `GROUP BY` 列不一致,并返回每组的第一行数据。因此,如果达梦数据库中的 `GROUP BY` 语句包含额外字段,需要调整 `SELECT` 列,使其与 `GROUP BY` 列保持一致,或者在 MySQL 中使用 `ANY_VALUE()` 函数来兼容。 5. **日期格式处理** 达梦数据库允许在 SQL 语句中使用带有 `T` 的日期字符串(如 `'2023-10-01T12:00:00'`),而 MySQL 不支持这种格式。需要将日期字符串转换为 MySQL 接受的格式,如 `'2023-10-01 12:00:00'`。 6. **空值排序处理** 达梦数据库在 `ORDER BY` 时,`NULL` 值排在最后,而非 `NULL` 值排在前面;而 MySQL 中 `NULL` 值排在最前面。可以通过 `ORDER BY` 后添加 `IS NULL` 来调整排序顺序。 例如: ```sql SELECT * FROM users ORDER BY create_time; ``` 可修改为: ```sql SELECT * FROM users ORDER BY create_time IS NULL, create_time; ``` 7. **函数替换** 达梦数据库中的 `NEWID()` 函数用于生成 UUID,而 MySQL 使用 `UUID()` 函数。因此,需要将 `NEWID()` 替换为 `UUID()`。同样,达梦的 `CONVERT(value, value_type)` 需要改为 MySQL 的 `CONVERT(value_type, value)` 或 `CAST(value AS value_type)`。 8. **逻辑运算符替换** 达梦数据库中使用 `||` 表示逻辑“或”操作,而 MySQL 使用 `OR`。因此,需要将所有 `||` 替换为 `OR`。 9. **单引号转义处理** 达梦数据库中使用 `'` 进行单引号转义,而 MySQL 使用 `''`。因此,需要将所有单引号转义的 `'` 替换为 `''`,特别是在 HTML 内容插入数据库时。 10. **不支持 `IGNORE` 的替换** 达梦数据库支持 `IGNORE` 关键字用于忽略某些错误,而 MySQL 不支持。需要根据具体语句调整,例如使用 `ON DUPLICATE KEY UPDATE` 或 `REPLACE INTO` 来替代。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值