web-dev-qa-db-fra.com

remplace NULL par une valeur vide ou zéro dans le serveur SQL

J'ai une table temporaire et l'une de mes colonnes total_amount est de type entier et NON NULL. Pendant l'interrogation des données, j'ai reçu des valeurs NULL pour la colonne total_Amount

J'ai déjà utilisé la syntaxe suivante pour supprimer les valeurs NULL, mais corrigez-moi si je me trompe.

Create table #Temp1
(
    issue varchar(100) NOT NULL,
    total_amount int NOT NULL
) 

Ceci est ma requête 

Case when total_amount = 0 then 0  
else isnull(total_amount, 0)  
end as total_amount  

Je suis confronté à un problème à mon autre partie. 

10
0537

Vous pouvez utiliser la fonction COALESCE pour renvoyer automatiquement les valeurs nulles sous la forme 0. La syntaxe est la suivante:

SELECT COALESCE(total_amount, 0) from #Temp1
17
shree.pat18

La méthode coalesce () est la meilleure solution lorsqu'il existe plusieurs valeurs de colonne [et]/[ou] et que vous souhaitez la première. Cependant, en regardant les livres en ligne, l'optimisation de la requête le convertit en instruction de casse.

Extrait MSDN

L'expression COALESCE est un raccourci syntaxique de l'expression CASE. 

En d'autres termes, le code COALESCE (expression1, ... n) est réécrit par l'optimiseur de requête sous la forme de l'expression CASE suivante:

CASE
   WHEN (expression1 IS NOT NULL) THEN expression1
   WHEN (expression2 IS NOT NULL) THEN expression2
   ...
   ELSE expressionN
END

Cela dit, pourquoi pas un simple ISNULL ()? Moins de code = meilleure solution?

Voici un extrait de code complet.

-- drop the test table
drop table #temp1
go

-- create test table
create table #temp1
(
    issue varchar(100) NOT NULL,
    total_amount int NULL
); 
go

-- create test data
insert into #temp1 values
    ('No nulls here', 12),
    ('I am a null', NULL);
go

-- isnull works fine
select
    isnull(total_amount, 0) as total_amount  
from #temp1

Dernier point, mais non le moindre, comment obtenez-vous des valeurs NULL dans une colonne NOT NULL?  

Je devais changer la définition de la table pour pouvoir configurer le scénario de test. Lorsque j'essaie de modifier la table en NOT NULL, elle échoue car elle effectue une vérification de nullabilité.

-- this alter fails
alter table #temp1 alter column total_amount int NOT NULL
3
CRAFTY DBA

Remplacer les valeurs nulles comme vides: ISNULL('Value','')

Remplacer les valeurs nulles par 0: ISNULL('Value',0)

1

Différentes façons de remplacer NULL sur un serveur SQL

Remplacement de la valeur NULL avec:

1. fonction ISNULL ()

2. Fonction COALESCE ()

3. CASE Statement

SELECT Name as EmployeeName, ISNULL(Bonus,0) as EmployeeBonus from tblEmployee

SELECT Name as EmployeeName, COALESCE(Bonus, 0) as EmployeeBonus 
FROM tblEmployee

SELECT Name as EmployeeName, CASE WHEN Bonus IS NULL THEN 0 
ELSE Bonus  END as EmployeeBonus 
FROM  tblEmployee
1
Rae Lee

Vous devez toujours renvoyer le même type dans toutes les conditions de cas:

Dans le premier, vous avez un personnage et de l'autre côté, vous avez un int.

Vous pouvez utiliser:

Select convert(varchar(11),isnull(totalamount,0))

ou si vous voulez avec votre solution: 

Case when total_amount = 0 then '0'   
else convert(varchar(11),isnull(total_amount, 0))  
end as total_amount  
1
Gatej Alexandru

Essaye ça

SELECT Title  from #Movies
    SELECT CASE WHEN Title = '' THEN 'No Title' ELSE Title END AS Titile from #Movies

OU 

SELECT [Id], [CategoryId], ISNULL(nullif(Title,''),'No data') as Title, [Director], [DateReleased] FROM #Movies
0
Narashi Hadiya