Je voudrais savoir comment utiliser NULL et une chaîne vide en même temps dans une WHERE
clause dans SQL Server. J'ai besoin de trouver des enregistrements qui ont des valeurs nulles ou une chaîne vide. Merci.
Je voudrais savoir comment utiliser NULL et une chaîne vide en même temps dans une WHERE
clause dans SQL Server. J'ai besoin de trouver des enregistrements qui ont des valeurs nulles ou une chaîne vide. Merci.
Réponses:
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 la section SELECT , vous pouvez 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.
SELECT *
FROM TableName
WHERE columnNAme IS NULL OR
LTRIM(RTRIM(columnName)) = ''
ltrim
et rtrim
si le but est simplement de comparer à une chaîne vide. RAISON: s'il y a UNIQUEMENT des espaces, une seule garniture enlèvera tout. Par exemple, vous ne vous souciez pas de savoir si la comparaison échoue car ce qui reste est "abc" ou "abc".
Pour trouver les lignes où se trouve col NULL
, une chaîne vide ou un espace (espaces, tabulations):
SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''
Pour trouver les lignes où se trouve col NOT NULL
, une chaîne vide ou un espace (espaces, tabulations):
SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
Quelques méthodes sargables ...
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 certains 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 expr non nulle dans la liste d'expressions ().
si le fieldValue est nul ou une chaîne vide alors: nous retournerons le deuxième élément puis 0.
donc 0 est égal à 0, alors cette valeur de champ est une chaîne nulle ou vide.
en python par exemple:
def coalesce(fieldValue):
if fieldValue in (null,''):
return 0
bonne chance
vous vérifiez null avec IS NULL et la chaîne vide avec LEN (RTRIM (LTRIM (Column))) = 0 in
SELECT *
FROM AppInfra.Person
WHERE LEN(RTRIM(LTRIM(NationalCode))) = 0 OR NationalCode IS NULL
select
isnull(column,'') column, *
from Table
Where column = ''
SELECT *
FROM Table
WHERE column like '' or column IS NULL OR LEN(column) = 0
Vous pouvez utiliser la isnull
fonction pour obtenir à la fois null
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
utilisantNULLIF
--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
en ''
utilisantSELECT 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
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'
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)
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()