Проверьте нулевое значение в MS Access Query - PullRequest
3 голосов
/ 28 января 2011

В SQL Server мы можем использовать функцию IsNull (), чтобы проверить, является ли значение выражения нулевым или нет. Например,

Select IsNull(sum(amount),0) as TotalAmount
  From Payments 

Аналогично, в MS Access Query есть какая-либо функция для проверки нуля. Мне нужно, чтобы тот же оператор выполнялся в MS Access Query.

Может ли кто-нибудь сказать мне замену IsNull() в MS Access.

Спасибо, что поделились своим временем.

Ответы [ 3 ]

10 голосов
/ 28 января 2011

Используя Jet / ACE, ваш запрос может быть переписан как:

SELECT IIf(Sum(amount) Is Null, 0, Sum(amount)) AS TotalAmount
FROM Payments

Это должно работать даже из C #, потому что Is Null и IIf оба встроены в Jet / ACE.Обратите внимание на пробел в Is Null и отсутствие скобок (это оператор , а не функция ).

Есть два дополнительных бонуса к использованию IIf и Is Null в отличие от Nz, даже если вам доступен Nz:

  • он выполняется быстрее, потому что вся обработка выполняется в ядре базы данных (поэтому он недолжны выполнять вызовы функций из библиотеки Access)
  • она сохраняет исходный тип поля;Поскольку Nz возвращает вариант, Jet / ACE вынужден отображать результат в виде строки (что обычно не соответствует желаемому при работе с датами, цифрами и т. д.)

UPDATE: у Аллена Брауна есть превосходный праймер при использовании IIf, Nz, IsNull() и Is Null.Я планировал опубликовать эту ссылку в качестве своего первоначального ответа, но не смог найти страницу в то время.Я сделал все, что мог, из памяти, но настоящая заслуга принадлежит мистеру Брауну.

6 голосов
/ 28 января 2011

Практически эквивалент в Access - это функция nz .

Здесь есть хорошая страница о том, как ее использовать .

Однако, если вы используете Access просто как базу данных и используете Jet в строке подключения, nz не будет вам доступен.

0 голосов
/ 30 августа 2016

Аналогично, также можно использовать дату и время при сортировке

.....ORDER BY TRANSDATE ASC,(IIf([PaymentTime] Is Null, '23:59:59', [PaymentTime])) DESC
...