创建/排列50位数字,并将其强制转换为varchar



我不能创建这么长的数值(数值超出范围(,所以我必须强制转换它,但它不起作用。

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