在H2数据库中,当我通过varchar列应用订单时,数字首先出现在Alphabets中。但是需要首先使用Alphabets然后是Numbers。
我试过
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
答案 0 :(得分:0)
试试这个
SELECT MYCOLUMN FROM MYTABLE ORDER BY REGEXP_REPLACE (MYCOLUMN,'(*)(\d)(*)','}\2') , MYCOLUMN
答案 1 :(得分:0)
可以做的一件事是按顺序改变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)
作为数字的ASCII值以57结尾。使用CHR(177),因为这是ASCII表中的最大值。
FYR:ASCII table
答案 2 :(得分:0)
鉴于示例数据集,我不确定您是否需要进一步的逻辑 - 所以我不会做出进一步的假设:
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