Uma consulta SQL que substitui os valores nulos.
Pergunta
Preciso de uma consulta SQL que retorne a ContactDate, SortName, City, ContactType e Resumo das tabelas abaixo. If any value is null, I need it to return the text “No Entry”.
ContactTable
- ContactId
- ContactDate
- ID do usuário
- Resumo
- Tipo de Contato
- SortName
Usuário
- ID do usuário
- Primeiro nome
- Sobrenome
- Endereço
Endereço
- Endereço
- Cidade
- Rua
- Estado
- Fecho eclair
Solução
SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
COALESCE(AddressTable.City, 'No Entry') AS City,
COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID
Aqui é um gráfico de formatos SQL DateTime para a instrução convert acima.
Outras dicas
Coalesce () em qualquer plataforma que valha seu peso no sal.
Certifique -se de lidar com problemas de elenco.
Tal como:
--(SQL Server)
SELECT
C.ContactID,
COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
COALESCE(SorName, 'No Entry') AS SortName
etc etc.
SELECT
ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table
Usar o ISNULL é bem simples.
A versão Oracle desta função é chamada nvl
. Mesmo uso - SELECT nvl(col_name, desired_value) FROM foo
.
A versão mais geral disso é decode
, que possui três parâmetros e permite especificar para qual valor da coluna você deseja executar um substituto (para que você possa substituir todos os 'Johnny' por 'John' ou algo assim).
Usando 'IIF'É uma solução de banco de dados de acesso, mas pode funcionar em outros DBs.
SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName
A função IIF retorna um dos 2 valores depende da avaliação de uma expressão.
Sintaxe SQL: IIF (Expressão, Valor True1, Valor Falso)
Você também pode fazer chamadas diferentes para cada coluna. Isso fará mais chamadas individuais, mas pode ser mais rápido se você não tiver muitas linhas para atualizar.
update ContactTable set ContactDate = 'No Entry' where ContactDate is null;
Repita para cada coluna.