我不能创建这么长的数值(数值超出范围(,所以我必须强制转换它,但它不起作用。
ID DesiredID
1 100000..1(50 digit long)
2 100000..2(50 digit long)
3 100000..3(50 digit long)
...
999 435345...(50 digit long)
数字可以有任何值,但它们必须是50位数,ID从1开始,一直到三位数(999(。
我试过类似的东西
select (100000.....000 + dense_rank() over (order by ID))::varchar(50)
但我得到的数值超出范围错误。带有:
select (1000 + dense_rank() over (order by ID))::varchar(4)
sql有效。
Postgres支持无限长度的数字,因此这两种方法都有效:
select '10000000000000000000000000000000000000000000000000000000000001'::numeric
select 10000000000000000000000000000000000000000000000000000000000001
如果以数字开头的数字真的有50位,那么代码就会正常工作。
我赌两个披萨和一瓶啤酒,你有一个1,后面跟着50个零,总共51位数。
这里有一个工作的例子:
- https://dbfiddle.uk/?rdbms=postgres_13&小提琴=c197e05132fa54b1187201ee28ca39e