Вернуть ноль, если NULL - PullRequest
       1

Вернуть ноль, если NULL

1 голос
/ 04 октября 2011

У меня есть часть MySQL, которая бьет некоторые пустые записи, как бы я установить это, чтобы вернуть 0, если NULL? Спасибо!

Попробовал это:

sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP
     WHERE IP = '%s' AND IPStatus = '1' AND IPMax     = '0' 
         AND IPType ='3'", ipSrc); 

Не работает:

sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP 
          WHERE IP = '%s' AND IPStatus = '1' AND IPMax = '0' 
             AND IPType ='3'", ipSrc,NULL),0); 

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

Обычно вы можете обернуть вещи, которые возвращают NULL, в coalesce функцию , которая дает вам первое ненулевое значение:

select coalesce (some-nullable-thing, 0 ) from ...

Однако count() должно никогда вернуть NULL.Если нет записей, удовлетворяющих условиям, он должен просто вернуть 0.

Если ваша проблема не в SQL, а в том факте, что ipSrc сам по себе равен NULL, это просто вопрос перед его преобразованием.обрабатывая его с sprintf.Чтобы преобразовать NULL в 0 и оставить все остальное нетронутым, вы можете использовать что-то вроде:

sprintf (queryString,
    "SELECT COUNT(*) FROM tblURLIP"
    " WHERE IP = '%s'"
    " AND IPStatus = '1'"
    " AND IPMax = '0'"
    " AND IPType ='3'",
    (ipSrc == NULL) ? "0" : ipSrc);   // <-- conversion happens here.

Это, кажется, ваше желаемое поведение.

1 голос
/ 04 октября 2011

Фрагмент кода, который вы публикуете, - чистый C (очевидно, он строит строку запроса для SQL, но здесь не делается SQL, просто строится строка).

Моя единственная интерпретация вашего вопросадля меня имеет смысл то, что иногда ipSrc имеет значение NULL, иногда оно указывает на допустимую строку символов.

Предполагая, что это так, я думаю, что это будет делать то, что, как вы думаете, вы спрашиваете:*

Ключевой частью является комбинация ? : оператора.Если это слишком запутанный C для вашего удобства, вы также можете сделать это:

if (ipSrc == 0) // instead of 0 you can use NULL if that better suits your style
    ipSrc = "0";
sprintf(queryString, "SELECT COUNT(*) FROM tblURLIP
         WHERE IP = '%s' AND IPStatus = '1' AND IPMax     = '0' 
             AND IPType ='3'", ipSrc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...