我有一个varchar column [flat_number]
具有一些价值的
A1A1A
A1A2A
A1A101A
A3A5A
12
A2
A3
我希望得到按数字排序的结果,然后先按字符排序
喜欢
12
A2
A3
A1A1A
A1A2A
A1A101A
A3A5A
我设法按数字对其进行排序(如果该列仅包含使用正则表达式的数字 0-9,我将其视为一个数字),然后我按字符对其进行排序,但它似乎对 A1A101A 的列值有效(有多个数字和字符的组合)
CASE
WHEN length(flat_number) < 10 AND flat_number SIMILAR TO '[0-9]+'
THEN
flat_number::int
END
ELSE
NULL
END,
( SELECT COALESCE( match[1], NULL ) FROM regexp_matches( flat_number, '[^0-9]+' ) AS match ),
( SELECT COALESCE( left( match[1], 9), NULL ) FROM regexp_matches( flat_number, '([0-9]+$)' ) AS match )::int
当前查询的工作方式为
如果该列仅包含数字 [0-9],我将其转换为 int 并将其排序为 ElSE,我将列拆分为 2 部分,并尝试在开头提取列字符并在结尾提取数字。
是否有更好的等待时间,并确保返回预期的输出