mysql字符串排序

1.字符串转成数字排序,直接后面+0

字段+0;

例如:

select code from user order by code+0 ASC;

2.字段是字符串但是字段前缀不同,首先根据前缀排序,然后根据前缀后面升序排序

建表并插入测试数据:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

— —————————-
— Table structure for t_differentprefix_sort
— —————————-
DROP TABLE IF EXISTS `t_differentprefix_sort`;
CREATE TABLE `t_differentprefix_sort`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

— —————————-
— Records of t_differentprefix_sort
— —————————-

INSERT INTO `t_differentprefix_sort` VALUES (1, ‘TYPEA-101’, ‘TYPEA’);
INSERT INTO `t_differentprefix_sort` VALUES (2, ‘TYPEA-102’, ‘TYPEA-‘);
INSERT INTO `t_differentprefix_sort` VALUES (3, ‘TYPEC-101’, ‘TYPEC’);
INSERT INTO `t_differentprefix_sort` VALUES (4, ‘TYPEC102’, ‘TYPEC’);
INSERT INTO `t_differentprefix_sort` VALUES (5, ‘TYPEB101’, ‘TYPEAB’);
INSERT INTO `t_differentprefix_sort` VALUES (6, ‘TYPEB-1003’, ‘TYPEAB’);

SET FOREIGN_KEY_CHECKS = 1;
 

查询:(注意这种包含的如果有被包含关系,要把字符串长的放前面,如:有AB和ABC,要把ABC放前面)

    SELECT
        id,name,type,
    CASE
            WHEN instr( NAME, “TYPEA-” ) > 0 THEN
            REPLACE ( NAME, “TYPEA-“, “” ) 
            WHEN instr( NAME, “TYPEB-” ) > 0 THEN
            REPLACE ( NAME, “TYPEB-“, “” ) 
            WHEN instr( NAME, “TYPEC-” ) > 0 THEN
            REPLACE ( NAME, “TYPEC-“, “” ) 
        END subsName 
FROM
        t_differentprefix_sort order by type ASC, subsName+0 ASC;

    原文作者:AscendKing
    原文地址: https://blog.csdn.net/wangwenzhe222/article/details/123713637
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞