Je voudrais savoir comment utiliser NULL et une chaîne vide en même temps dans une clause WHERE
dans SQL Server. J'ai besoin de trouver des enregistrements qui ont soit des valeurs NULL ou une chaîne vide. Merci.
Select *
From Table
Where (col is null or col = '')
Ou
Select *
From Table
Where IsNull(col, '') = ''
Vous pouvez simplement faire ceci:
SELECT *
FROM yourTable
WHERE yourColumn IS NULL OR yourColumn = ''
Si vous en avez besoin dans SELECT la section peut utiliser comme ceci.
SELECT ct.ID,
ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
FROM [dbo].[CustomerTable] ct
vous pouvez remplacer la null
par votre valeur de substitution.
SELECT *
FROM TableName
WHERE columnNAme IS NULL OR
LTRIM(RTRIM(columnName)) = ''
Pour rechercher des lignes où col est NULL
, chaîne vide ou espace (espaces, tabulations):
SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''
Pour rechercher des lignes où col est NOT NULL
, chaîne vide ou espace (espaces, tabulations):
SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
Quelques 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 uns 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,'') = '';
ma meilleure solution:
WHERE
COALESCE(char_length(fieldValue), 0) = 0
COALESCE renvoie la première expression non nulle dans la liste d'expressions ().
si la variable fieldValue est null ou une chaîne vide, nous renverrons le deuxième élément, puis 0.
si 0 est égal à 0 alors ce champ Valeur est une chaîne nulle ou vide.
dans python par exemple:
def coalesce(fieldValue):
if fieldValue in (null,''):
return 0
bonne chance
Ceci est moche MSSQL:
CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END
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 utiliser ceci:
dbo.isnull (valeur, 0)
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()
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'
youe check null With IS NULL et chaîne Empty With LEN (RTRIM (LTRIM (Column))) = 0 in
SELECT *
FROM AppInfra.Person
WHERE LEN(RTRIM(LTRIM(NationalCode))) = 0 OR NationalCode IS NULL
Vous pouvez utiliser la fonction isnull
pour obtenir les valeurs null
et les valeurs vides d'un champ de texte:
SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
--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
à l'aide de 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
SELECT *
FROM Table
WHERE column like '' or column IS NULL OR LEN(column) = 0