Comment utiliser la chaîne nulle ou vide en SQL

je voudrais savoir comment utiliser à la fois NULL et une chaîne vide dans une clause WHERE dans SQL Server. J'ai besoin de trouver les enregistrements qui ont soit des valeurs null ou une chaîne vide. Grâce.

79
demandé sur K48 2013-03-27 19:50:56

15 réponses

Select *
From Table
Where (col is null or col = '')

ou

Select *
From Table
Where IsNull(col, '') = ''
153
répondu codingbadger 2013-03-27 15:55:01

vous pouvez simplement faire ceci:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''
22
répondu Praveen Nambiar 2013-03-27 15:54:37

si vous en avez besoin dans sélectionnez la section peut utiliser comme ceci.

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

vous pouvez remplacer le null par votre valeur de substitution.

13
répondu Sameera R. 2018-07-10 08:12:17
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''
9
répondu John Woo 2013-03-27 15:53:09

pour trouver les lignes où col est NULL , chaîne vide ou espace (espaces, onglets):

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

pour trouver les lignes où col est NOT NULL , chaîne vide ou espace (espaces, onglets):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
6
répondu Scott Sterling 2015-10-09 03:32:18

Certains sargable méthodes...

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);

et quelques non-sargables...

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

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

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';
5
répondu Martin Smith 2017-05-23 11:54:44

C'est moche MSSQL:

CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END
2
répondu ADM-IT 2015-09-29 16:37:24
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0
1
répondu Charaf JRA 2013-03-27 15:55:19

vous pouvez utiliser isnull pour obtenir à la fois null et les valeurs vides d'un champ de texte:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
1
répondu Alberto De Caro 2013-03-27 15:59:08
--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

vous pouvez examiner '' comme NULL en le convertissant en NULL en utilisant NULLIF

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

ou vous pouvez examiner NULL comme '' en utilisant SELECT 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
répondu BTE 2014-11-07 14:23:17

ma meilleure solution:

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

COALESCE renvoie le premier expr non nul dans la liste des expressions().

si la valeur de fieldValue est nulle ou chaîne vide alors: nous retournerons le deuxième élément puis 0.

donc 0 est égal à 0 alors cette valeur de champ est nulle ou chaîne vide.

en python par exemple:

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

bonne chance

1
répondu Anouar Mokhtari 2017-02-16 14:55:27

dans sproc, vous pouvez utiliser la condition suivante:

DECLARE @USER_ID VARCAHR(15)=NULL --THIS VALUE IS NULL OR EMPTY DON'T MATTER
IF(COALESCE(@USER_ID,'')='')
PRINT 'HUSSAM'
1
répondu mohammed hussamuddin hussamudd 2017-05-11 08:24:05

par cette fonction:

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

et utilisez ceci:

dbo.isnull(valeur 0)

1
répondu Mohsen.Sharify 2017-08-05 11:32:15
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()
1
répondu Vinicius.Beloni 2018-01-18 20:06:49

youe vérifier null NULL et chaîne Vide Avec LEN(RTRIM(LTRIM(Colonne))) = 0 in

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL
1
répondu Alireza Shabani 2018-08-13 12:40:59