Eu tenho uma coluna em uma tabela que pode conter valores nulos ou vazios. Como verifico se uma coluna está vazia ou nula nas linhas presentes em uma tabela?
(e.g. null or '' or ' ' or ' ' and ...)
Eu tenho uma coluna em uma tabela que pode conter valores nulos ou vazios. Como verifico se uma coluna está vazia ou nula nas linhas presentes em uma tabela?
(e.g. null or '' or ' ' or ' ' and ...)
Respostas:
Isso selecionará todas as linhas em que some_col
está NULL
ou ''
(string vazia)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(um espaço inserido na string), ela funcionará no MySQL e no Oracle, consulte a resposta "onedaywhen". some_col = ''
não funciona no Oracle, pois cadeias vazias significam NULL lá.
' '
, ele não funcionará no SQLite. Ele lida apenas com correspondência de seqüência idêntica / direta.
Conforme definido pelo SQL-92 Standard, ao comparar duas cadeias de larguras diferentes, o valor mais estreito é preenchido à direita com espaços para torná-lo com a mesma largura que o valor mais amplo. Portanto, todos os valores de cadeia que consistem inteiramente em espaços (incluindo espaços zero) serão considerados iguais, por exemplo,
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Portanto, isso deve funcionar independentemente de quantos espaços compõem o some_col
valor:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
ou mais sucintamente:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(um espaço inserido na string) e, em seguida, ele funciona no MySQL e no Oracle. some_col = ''
não funciona no Oracle, pois cadeias vazias significam NULL e a condição completa se torna NULL.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
e SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
trabalhar para mim no MySQL. Espero que isso seja útil.
'' = ' '
funciona no SQLServer, mas não no SQLite, tanto quanto posso dizer, testando-o agora.
Uma maneira mais curta de escrever a condição:
WHERE some_col > ''
Desde que null > ''
produz unknown
, isso tem o efeito de filtrar as null
seqüências de caracteres e as vazias.
coalesce(some_col, '') = ''
Você pode testar se uma coluna é nula ou não, usando WHERE col IS NULL
ou, WHERE col IS NOT NULL
por exemplo,
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
No seu exemplo, você tem várias permutações de espaço em branco. Você pode remover o espaço em branco usando TRIM
e pode usar COALESCE
como padrão um valor NULL (COALESCE retornará o primeiro valor não nulo dos valores que você fornecer.
por exemplo
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Essa consulta final retornará linhas onde MyCol
é nulo ou tem qualquer tamanho de espaço em branco.
Se você puder evitá-lo, é melhor não ter uma função em uma coluna na cláusula WHERE, pois dificulta o uso de um índice. Se você simplesmente deseja verificar se uma coluna é nula ou vazia, é melhor fazer isso:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Consulte TRIM COALESCE e IS NULL para obter mais informações.
Também trabalhando com valores nulos dos documentos do MySQL
)
antes do =
sinal no seu segundo exemplo
Outro método sem ONDE, tente isso ..
Selecionará os valores Vazio e NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Ou
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
ou
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Eu odeio campos confusos em meus bancos de dados. Se a coluna puder ser uma sequência em branco ou nula, prefiro corrigir isso antes de fazer a seleção a cada vez, assim:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Isso mantém os dados organizados, desde que você não precise diferenciar especificamente entre NULL e vazio por algum motivo.
experimentar
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
ou
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Ao verificar o null or Empty
valor de uma coluna no meu projeto, notei que há alguma preocupação 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 no SQL é usada para remover o prefixo ou sufixo especificado de uma sequência. O padrão mais comum sendo removido são os espaços em branco. Essa função é chamada de maneira diferente em bancos de dados diferentes:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Como verificar vazio / nulo: -
Abaixo estão duas maneiras diferentes de acordo com diferentes bancos de dados -
A sintaxe para essas funções de apara são:
Use o Trim para verificar
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
O uso de LTRIM e RTRIM para verificar
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Acima, os dois modos fornecem o mesmo resultado, basta usar com base no seu suporte ao DataBase. Ele apenas retorna a tabela FirstName
from UserDetails
se ela estiver vaziaLastName
Esperando que isso ajude você :)
Se você deseja que os valores NULL sejam apresentados por último ao executar um ORDER BY, tente o seguinte:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Verificar nulo
$column is null
isnull($column)
Verifique se há vazio
$column != ""
No entanto, você deve sempre definir NOT NULL para a coluna, a
otimização do mysql pode manipular apenas um nível IS NULL
NULL
valores é outro tópico para discussão. Não acho apropriado fazer essa recomendação sem fornecer seu raciocínio.
-1
e ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
e LTRIM
, mas não TRIM
?
No meu caso, o espaço foi inserido na coluna durante a importação de dados e, embora parecesse uma coluna vazia, seu comprimento era 1. Então, antes de tudo, verifiquei o comprimento da coluna de aparência vazia usando length(column)
então, com base nisso, podemos escrever uma consulta de pesquisa
SELECT * FROM TABELA ONDE COMPRIMENTO (COLUNA) = comprimento da coluna para a coluna vazia
tente isso se o tipo de dados for string e a linha for nula
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
se o tipo de dados for int ou column for 0, tente isso
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
retorna 1 se minha coluna for nula.