Como usar NULL ou seqüência vazia no SQL


129

Gostaria de saber como usar NULL e uma string vazia ao mesmo tempo em uma WHEREcláusula no SQL Server. Eu preciso encontrar registros que tenham valores nulos ou uma seqüência de caracteres vazia. Obrigado.


5
Há uma palavra-chave OR no SQL.
Robert Harvey

13
Esta pergunta não mostra nenhum esforço de pesquisa. É importante fazer sua lição de casa . Diga-nos o que encontrou e por que ele não atendeu às suas necessidades. Isso demonstra que você reservou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. FAQ .
27513 Kermit

1
possível duplicata Como selecionar dados da tabela MySQL onde uma coluna é NULL (esta era uma questão MySQL, mas é basicamente a mesma resposta para T-SQL)
Michael Berkowski

Respostas:



27

Você pode simplesmente fazer isso:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''

25

Se você precisar na seção SELECT , pode usar assim.

    SELECT  ct.ID, 
            ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
    FROM    [dbo].[CustomerTable] ct

você pode substituir nullpor seu valor de substituição.


1
O NVL da Oracle (var1, 'valor') cuidará da substituição da string vazia. Isnull do T-SQL (var1, 'valor') não.
Folha Jenna

15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''

2
SELECT * FROM TableName WHERE columnNAme É NULL OU RTRIM (columnName) = ''
Xavier John

2
Como Xavier ressalta, não há necessidade de fazer AMBOS ltrime rtrimse o objetivo é apenas comparar com uma string vazia. MOTIVO: se houver APENAS espaços em branco, um único recorte removerá tudo. Por exemplo, você não se importa se a comparação falha porque o que resta é "abc" ou "abc".
Home

8

Para encontrar linhas em que col está NULL, sequência vazia ou espaço em branco (espaços, guias):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''

Para encontrar linhas em que col está NOT NULL, sequência vazia ou espaço em branco (espaços, guias):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''

7

Alguns métodos sargáveis ...

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);

E alguns não sargáveis ​​...

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';

3

Este é MSSQL feio:

CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END

3

minha melhor solução:

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

COALESCE retorna a primeira expr não nula na lista de expressões ().

se o fieldValue for nulo ou vazio, então: retornaremos o segundo elemento e, em seguida, 0.

então 0 é igual a 0, então este fieldValue é uma sequência nula ou vazia.

em python, por exemplo:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

boa sorte


2

youe verifica null With IS NULL e string Empty With LEN (RTRIM (LTRIM (coluna))) = 0 em

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL


1
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0

1

Você poderia usar isnull função para obter nullvalores vazios e de um campo de texto:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

A função isnull literalmente apenas verifica se o valor é nulo. Não funcionará se a sequência estiver vazia ("").
Max Pringle

@Max Pringle. Eu não afirmo de forma diferente. Além disso, o código fornecido aborda a solicitação de pergunta. Não tenho certeza da sua contribuição. Sugira uma edição em vez de reduzir a votação.
Alberto De Caro

vai seguir o seu conselho. Eu coloquei uma edição sugerida agora. Esta cláusula where obtém apenas os valores nulos, e não os valores da string vazia. Um nullif pode ser usado para obter os valores vazios.
Max Pringle

1
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
 1  JOHN
 2  -- is empty string
 3  NULL

Você pode examinar ''como NULLconvertendo-o para NULLusarNULLIF

--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T 
 1  JOHN
 2  NULL
 3  NULL

ou você pode examinar NULLcomo ''usandoSELECT ISNULL(NULL,'')

-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1   JOHN
2   -- is empty string
3   -- is empty string

--clean up
DROP TABLE #T

1

No sproc, você pode usar a seguinte condição:

DECLARE @USER_ID VARCAHR(15)=NULL --THIS VALUE IS NULL OR EMPTY DON'T MATTER
IF(COALESCE(@USER_ID,'')='')
PRINT 'HUSSAM'

1

por esta função:

ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN

    return (case when @input='' then @ret when @input is null then @ret else @input end)

END

e use isto:

dbo.isnull (valor, 0)


1
SELECT * FROM DBO.AGENDA
WHERE 
  --IF @DT_START IS NULL OR EMPTY
  ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) -- GET ALL DATE
  OR --ELSE
  ( DT_START >= @DT_START ) --FILTER

-- MORE FILTER

SELECT * FROM DBO.AGENDA
WHERE 
  ( ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) OR ( DT_START >= @DT_START ) ) 
  AND
  DT_END < GETDATE()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.