MySQL, сложение и NULL
10 февраля 2009
Вчера столкнулся с интересной штукой при работе с MySQL:
SELECT NULL + 13
даст нам NULL.
Чтобы получилось ожидаемое (по крайней мере я почему-то ожидал) 13:
SELECT IFNULL(NULL, 0) + 13
IFNULL возвращает то, что передано вторым параметром, если первый равен NULL.
Вместо NULL, как вы наверное догадались, было поле типа INT.
Комментарии RSS по email OK
А зачем такие танцы с "бубном"?! =)
Ну собственно и ожидалось NULL. Помнишь басню про Буратино, яблоки и обнуление переменных? )
Да вполне ожидаемо, что что-то + неопределённость даст в итоге неопределённость. Добавлю, что в MSSQL подобная функция называется ISNULL.
Денис
Отчёты строю.
DM
Помню-помню :)
Такие случаи - неизбежное следствие обучения по чужим сурсам.
Документацию читать надо :)
Ну так из неё я и почерпнул IFNULL. Документация читается полностью один-два раза. Если она объёмистая, большая её часть забывается. Остаётся только «где-то я это уже видел».
Конкатенация строк тоже NULL вернет.
%username%, будь бдителен! :)
Бывает еще круче:
http://gray-hemp.blogspot.com/2009/02/null-not-in.html
Есть стандартная функция, делающая то же самое: COALESCE
Отличие два:
1) Она может принимать произвольное число аргументов. Возвращает первый, который не NULL;
2) Поддерживается большинством БД (mysql,postgresql,sqlite,mssql,oracle,db2) и имеет там одинаковую семантику.
Так ведь NULL и ноль -- не одно и то же. В мануале по мускулю это написано.
Спасибо!
Очень помогло. Промучался 1.5 часа пока не наткнулся на Вашу подсказку.
Спасибо. Оч помогло )
Leo и Максим - :D
Наверное Вы только в 7й перешли класс, и не стоит над Вами подшучивать. Но Вы бы перед тем как за программирование садиться - научились бы "учиться".
Автору тоже самое. Не полился бы. А то может твое начальство это увидит, и выкинет (если ты конечно работаешь).
Мозг, не вижу ничего плохого в том, что я чего-то не знал.