我有一些这样的数据:
id | templateName ----+-------------- 10 | a 61 | a 63 | a 4 | a 6 | a 7 | a 34 | a 35 | a 62 | a 1 | a 13 | a 25 | a 26 | a 66 | a 68 | a 70 | a 65 | a 5 | a1 73 | a5 3 | a15 2 | a15a 69 | a15b 64 | a15b4 74 | a15b21 8 | a214748364
我正在使用以下代码进行自然排序:
CREATE TYPE ai AS (a text, i int); select id, "templateName" from daily_templates order by ARRAY(SELECT ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai FROM regexp_matches("templateName", '(\D*)(\d*)', 'g') x) , "templateName";
就像我上面显示的那样,它的工作原理很好。现在我想支持诸如
a111111111111111111111
这将超出的范围integer。我怎样才能做到这一点?参考:单词和数字混合字符串的人性化或自然数排序
integer
它像@clemens建议的那样工作。在复合类型中使用numeric(= decimal):
numeric
decimal
CREATE TYPE ai AS (a text, i numeric);
db <>在这里拨弄
我int在参考答案中使用的原因是性能。
int