0

这是我在stackoverflow中发布的第一个问题,我希望有人可以帮助我。到目前为止,我找不到任何人在这里问类似的问题。

我想检查一下德国的 IBAN 是否正确。原则上,这很容易:将 Bank_number(8 位)与 Account_Number(10 位)、相当于 DE 的数字(1314 = 4 位)和支票号码(2 位)连接起来,然后计算模除法和结果应该是 1。

这是我输入 MySQL 的代码:

SELECT MOD(500105175404777100131451,97) as a
     , MOD(CONVERT(CONCAT("50010517","5404777100","1314","51"), UNSIGNED),97) as b
     , CONVERT(CONCAT("50010517","5404777100","1314","51"), UNSIGNED) as c

这是我从 MySQL 得到的结果:

a   b    c
1   60   18446744073709551615

如您所见,当我手动输入整个数字时,我得到了正确的结果 (1),但是当我尝试从单独的字符串中构造数字时(以这种格式,它们迄今为止保存在数据库中),模除法不起作用,因为字符串被错误地转换为数字。

谁能告诉我可能是什么问题?

我尝试了“BIGINT”而不是“UNSIGNED”,但随后出现错误

"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near 'BIGINT"

任何帮助将不胜感激。

谢谢斯蒂芬

4

1 回答 1

1

使用DECIMAL(24)数字类型。

SELECT MOD(500105175404777100131451,97) as a
     , MOD(CONVERT(CONCAT("50010517","5404777100","1314","51"), decimal(24)),97) as b
     , CONVERT(CONCAT("50010517","5404777100","1314","51"), decimal(24)) as c
于 2013-12-05T16:09:30.470 回答