这是我在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"
非常感谢任何帮助。
由于 斯蒂芬
答案 0 :(得分: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