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.
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
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
Remplacer les valeurs nulles comme vides: ISNULL('Value','')
Remplacer les valeurs nulles par 0: ISNULL('Value',0)
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
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
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