繁体   English   中英

在SQL中,先按字母排序,然后按数字排序

[英]In SQL sort by Alphabets first then by Numbers

在H2数据库中,当我在varchar上应用顺序时,先显示数字,然后是字母。 但是需要先输入字母然后再输入数字。

我尝试过

ORDER BY IF(name RLIKE '^[a-z]', 1, 2), name

但是出现错误,例如H2中的条件条件不可用。

我的列数据就像

A
1-A
3
M
2-B

5
B-2

它应该像

A
B-2
M
1-A
2-B
3
5

试试这个

SELECT MYCOLUMN FROM MYTABLE ORDER BY REGEXP_REPLACE (MYCOLUMN,'(*)(\d)(*)','}\2') , MYCOLUMN

可以完成的一件事情是通过按子句更改ASCII。

    WITH tab
     AS (SELECT 'A' col FROM DUAL
         UNION ALL
         SELECT '1-A' FROM DUAL
         UNION ALL
         SELECT '3' FROM DUAL
         UNION ALL
         SELECT 'M' FROM DUAL
         UNION ALL
         SELECT '2-B' FROM DUAL
         UNION ALL
         SELECT '5' FROM DUAL
         UNION ALL
         SELECT 'B-2' FROM DUAL)
  SELECT col
    FROM tab
ORDER BY CASE WHEN SUBSTR (col, 1, 1) < CHR (58) THEN CHR (177) || col ELSE col END;

我使用CHR(58)作为以57结尾的ASCII值。使用CHR(177),因为这是ASCII表中的最大值。

FYR: ASCII表

给定示例数据集,我不确定是否需要除此以外的其他逻辑-因此,我将避免做进一步的假设:

DECLARE @temp TABLE (myval char(3))
INSERT INTO @temp VALUES
('A'), ('1-A'), ('3'), ('M'), ('2-B'), ('5'), ('B-2')

SELECT myval
FROM @temp
ORDER BY CASE WHEN LEFT(myval, 1) LIKE '[a-Z]'
             THEN 1
             ELSE 2
       END
      ,LEFT(myval, 1)

给出输出:

myval
A  
B-2
M  
1-A
2-B
3  
5  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM