Verificar o valor nulo na pesquisa de acesso do MS
no servidor SQL podemos usar a função IsNull () para verificar se o valor da expressão é nulo ou não. Para ex.
Select IsNull(sum(amount),0) as TotalAmount
From Payments
da mesma forma, existe qualquer função na consulta MS Access para verificar o nulo. Preciso que a mesma declaração seja executada no MS Access Query.
alguém pode dizer-me o substituto para IsNull()
no MS Access.
3 answers
Praticamente o equivalente no Access é a função nz.
Há uma boa página sobre como usá-lo aqui .
No entanto, se estiver a usar o Access apenas como uma infra-estrutura de base de dados e a usar o Jet no seu conectionstring, a nz não estará disponível para si.Usando o Jet / ACE, a sua pesquisa pode ser reescrita como:
SELECT IIf(Sum(amount) Is Null, 0, Sum(amount)) AS TotalAmount
FROM Payments
Isto deve funcionar mesmo a partir de C# porque Is Null
e IIf
são ambos construídos para Jet/ACE. Por favor, note o espaço em Is Null
e a falta de parêntesis (é uma declaração , não uma função ).
Há dois bónus adicionais para usar IIf
e Is Null
em oposição a Nz
mesmo que Nz
esteja disponível para ti:
- ele executa mais rápido porque todo o processamento é feito dentro do motor de banco de dados (para que não tenha de fazer chamadas de funções para a biblioteca de acesso)
- mantém o tipo original do campo; dado que
Nz
devolve uma variante, o Jet/ACE é forçado a mostrar o resultado como uma sequência (que normalmente não é o que deseja ao lidar com datas, números, etc.)
ATUALIZAÇÃO: Allen Browne tem um excelente primer sobre o uso de IIf
, Nz
, IsNull()
, e Is Null
. Estava a planear postar esse link como meu resposta original, mas não consegui encontrar a página na altura. Fiz o melhor que pude de memória, mas o verdadeiro crédito vai para o Sr. Browne.
Igualmente. , também pode ser usado na data e hora da ordenação
.....ORDER BY TRANSDATE ASC,(IIf([PaymentTime] Is Null, '23:59:59', [PaymentTime])) DESC