![](/img/trans.png)
[英]SQL query to sort data while insert , first numbers then alphabets an last symbols
[英]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.