postgresql 带否定数字的Postgres排序规则

oknrviil  于 2023-04-11  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

有没有一种方法可以按varchar列进行数字排序,以便取反的数字首先出现:
aaa-10bbb < aaa-2bbb < aaa2bbb
我使用了以下排序规则

CREATE COLLATION custom_collation (provider = icu, locale = 'en-u-kn-true');
SELECT * FROM my_table ORDER BY a_field COLLATE custom_collation;

但是在这种情况下,负号没有被考虑在内。我能以某种方式扩展它吗?
任何帮助都很感激。谢谢!

vdgimpew

vdgimpew1#

让我们定义一个新的排序规则,其中包括否定符号(-)作为一个单独的字符,应该被视为小于任何数字位。还设置deterministic=true以确保跨平台的顺序一致,并设置co ='〈'以指示应该使用小于运算符进行比较。

CREATE COLLATION custom_collation (
  provider = icu,
  locale = 'en-u-kn-true',
  deterministic = true,
  co = '<',
  collation_rules = '&0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < "-"'
) based on uca;

SELECT * FROM my_table ORDER BY a_field COLLATE custom_collation;

相关问题