<rmcreative>

RSS

MySQL, сложение и NULL

10 февраля 2009

Вчера столкнулся с интересной штукой при работе с MySQL:

SELECT NULL + 13

даст нам NULL.

Чтобы получилось ожидаемое (по крайней мере я почему-то ожидал) 13:

SELECT IFNULL(NULL, 0) + 13

IFNULL возвращает то, что передано вторым параметром, если первый равен NULL.

Вместо NULL, как вы наверное догадались, было поле типа INT.

Комментарии RSS

  1. №1234
    Денис
    Денис 10.02.2009, 18:41:20

    А зачем такие танцы с "бубном"?! =)

  2. №1235
    DM
    DM 10.02.2009, 19:03:13

    Ну собственно и ожидалось NULL. Помнишь басню про Буратино, яблоки и обнуление переменных? )

  3. №1236
    GeNtlE
    GeNtlE 10.02.2009, 19:03:44

    Да вполне ожидаемо, что что-то + неопределённость даст в итоге неопределённость. Добавлю, что в MSSQL подобная функция называется ISNULL.

  4. №1237
    Sam
    Sam 10.02.2009, 19:22:21

    Денис

    Отчёты строю.

    DM

    Помню-помню :)

  5. №1238
    о_О Тынц
    о_О Тынц 10.02.2009, 19:27:06

    Такие случаи - неизбежное следствие обучения по чужим сурсам.

    Документацию читать надо :)

  6. №1240
    Sam
    Sam 10.02.2009, 20:32:35

    Ну так из неё я и почерпнул IFNULL. Документация читается полностью один-два раза. Если она объёмистая, большая её часть забывается. Остаётся только «где-то я это уже видел».

  7. №1241
    dohlik
    dohlik 10.02.2009, 20:36:16

    Конкатенация строк тоже NULL вернет.

    %username%, будь бдителен! :)

  8. №1256
    Vladimir Rusinov
    Vladimir Rusinov 11.02.2009, 18:04:14

    Бывает еще круче:

    http://gray-hemp.blogspot.com/2009/02/null-not-in.html

  9. №1326
    Alno
    Alno 01.03.2009, 16:16:11

    Есть стандартная функция, делающая то же самое: COALESCE

    Отличие два:

    1) Она может принимать произвольное число аргументов. Возвращает первый, который не NULL;

    2) Поддерживается большинством БД (mysql,postgresql,sqlite,mssql,oracle,db2) и имеет там одинаковую семантику.

  10. №1459
    Алексей Новиков
    Алексей Новиков 06.04.2009, 22:56:54

    Так ведь NULL и ноль -- не одно и то же. В мануале по мускулю это написано.

  11. №2237
    Leo
    Leo 08.02.2010, 22:10:13

    Спасибо!

    Очень помогло. Промучался 1.5 часа пока не наткнулся на Вашу подсказку.

  12. №4165
    Максим
    Максим 24.03.2011, 2:10:30

    Спасибо. Оч помогло )

  13. №6496
    Мозг
    Мозг 28.07.2012, 1:50:47

    Leo и Максим - :D

    Наверное Вы только в 7й перешли класс, и не стоит над Вами подшучивать. Но Вы бы перед тем как за программирование садиться - научились бы "учиться".

    Автору тоже самое. Не полился бы. А то может твое начальство это увидит, и выкинет (если ты конечно работаешь).

  14. №6497
    Sam
    Sam 28.07.2012, 4:43:31

    Мозг, не вижу ничего плохого в том, что я чего-то не знал.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.