Eu gostaria de escrever uma instrução SELECT que usa apenas um teste para retornar colunas sem valor (nulo, vazio ou todos os espaços).
Achei que isso funcionaria:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
Mas isso não funciona para valores NULL.
Claro que posso adicionar
OR column_name IS NULL
e vai funcionar, mas gostaria de uma forma que usasse um único teste.
Respostas:
Funcionalmente, você deve ser capaz de usar
SELECT column_name FROM table_name WHERE TRIM(column_name) IS NULL
O problema é que um índice em COLUMN_NAME não seria usado. Você precisaria ter um índice baseado em função em TRIM (column_name) se essa for uma condição seletiva.
fonte
SELECT column_name from table_name WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
ISNULL(column_name, '')
retornará '' se nome_da_coluna for NULL, caso contrário, ele retornará nome_da_coluna.ATUALIZAR
No Oracle, você pode usar
NVL
para obter os mesmos resultados.SELECT column_name from table_name WHERE RTRIM(NVL(column_name, '')) LIKE ''
fonte
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
A função NULLIF converterá qualquer valor de coluna com apenas espaços em branco em um valor NULL. Funciona para T-SQL e SQL Server 2008 e superior.
SELECT [column_name] FROM [table_name] WHERE NULLIF([column_name], '') IS NULL
fonte
Ao verificar o
null or Empty
valor de uma coluna, percebi que existem algumas preocupações de suporte em vários bancos de dados.Todo banco de dados não suporta
TRIM
método.Abaixo está a matriz apenas para entender os métodos suportados por diferentes bancos de dados.
A função TRIM em SQL é usada para remover o prefixo ou sufixo especificado de uma string. O padrão mais comum sendo removido são os espaços em branco. Esta função é chamada de forma diferente em diferentes bancos de dados:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
TRIM(), RTRIM(), LTRIM()
Como verificar espaços vazios / nulos / em branco: -
A sintaxe para essas funções de corte é:
Uso de Trim para verificar
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Uso de LTRIM e RTRIM para verificar
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Acima, ambas as formas fornecem o mesmo resultado, apenas use com base no seu suporte de banco de dados. Ele apenas retorna a
FirstName
partir deUserDetails
mesa se tiver um vazioLastName
Espero que isso ajude outras pessoas também :)
fonte
Esta consulta phpMyAdmin está retornando essas linhas, que NÃO são nulas ou vazias ou apenas espaços em branco:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
se você deseja selecionar linhas que são nulas / vazias / apenas espaços em branco, apenas remova NOT.
fonte
Use a consulta abaixo e funciona
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
fonte
O que eu uso
IsNotNullOrEmptyOrWhiteSpace
no T-SQL é:SELECT [column_name] FROM [table_name] WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
fonte
Cada sugestão de uma pessoa para executar uma consulta no Oracle para encontrar registros cujo campo específico está apenas em branco (isso não está incluindo (nulo) ou qualquer outro campo apenas uma linha em branco) não funcionou. Tentei todos os códigos sugeridos. Acho que vou continuar pesquisando online.
*****ATUALIZAR*****
Tentei fazer isso e funcionou, não sei por que não funcionaria se <1, mas por algum motivo <2 funcionou e só retornou registros cujo campo está apenas em branco
selecione [columnName] de [tableName] onde LENGTH (columnName) <2;
Estou supondo que qualquer script que foi usado para converter dados deixou algo no campo, embora apareça em branco, esse é o meu palpite de qualquer maneira sobre por que <2 funciona, mas não <1
No entanto, se você tiver quaisquer outros valores nesse campo de coluna com menos de dois caracteres, talvez seja necessário encontrar outra solução. Se não houver muitos outros personagens, você pode selecioná-los.
Espero que minha solução ajude outra pessoa algum dia.
fonte
Como no Oracle, você pode usar a função NVL no MySQL, você pode usar IFNULL (columnaName, newValue) para obter o resultado desejado como neste exemplo
SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
fonte
você pode usar
SELECT [column_name] FROM [table_name] WHERE [column_name] LIKE '% %' OR [column_name] IS NULL
fonte