2013-12-05 3 views
0

это мой первый вопрос, который я отправляю в stackoverflow, надеюсь, кто-то может мне помочь. До сих пор я не мог найти никого, задающего подобный вопрос.MySQL автоматически вычисляет переполнение IBAN bigint

Я хотел бы проверить, является ли немецкий 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), но когда я пытаюсь построить онемение er из отдельных строк (в этом формате они до сих пор сохранены в базе данных), модульное деление не работает, потому что строка неправильно преобразуется в число.

Может ли кто-нибудь сказать мне, в чем проблема?

Я попытался «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" 

Любая помощь будет очень цениться.

Благодаря Stephan

ответ

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 
Смежные вопросы