首页 > 解决方案 > sql取模大数

问题描述

我有一个很大的数字,它代表一个预先确定的 IBAN 号码。对于验证,模 % 97 必须为 1。但是......我得到了这个“varchar 值 '272429142829272429' 的转换溢出了一个 int 列”。代码是这样的:

select U.Denumire 
from terti U
where (len(U.cont_in_banca) < 10) and
 (Convert(int, Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace (Replace 
(Replace (Replace (Replace (Replace( Replace (Replace(Replace (Replace( RIGHT(U.cont_in_banca,36) + LEFT(U.cont_in_banca,4), ' ',''),'A','10'),'B', '11'),'C', '12'), 'D', '13'),
'E', '14'),'F', '15'),'G', '16'), 'H', '17'),'I', '18'), 'J', '19'), 'K', '20'),'L','21'),'M','22'),'N','23'),'O','24'),'P', '25'),'Q','26'), 'R', '27'),'S','28'),'T','29'),'U','30'),
'V','31'),'W','32'),'X','33'),'Y', '34'),'Z','35')) %97 = 1)

我也尝试过转换为numeric(38, 0)而不是转换为int,但得到以下错误:

将数据类型 varchar 转换为数字时出错。

标签: sqlnumbersmodulo

解决方案


而不是convert(int, . . . )使用convert(decimal(38, 0), . . . ). 那应该足够大以存储价值。


推荐阅读