0
votes

Comment remplacer NULL par une chaîne vide dans SQL 2017

La colonne occurrence_limit est le type de données money,

Si c'est NULL je veux juste une chaîne vide ( '' ), mais cela donne me 0.00.

ISNULL(occurrence_limit,'')  as occurrence_limit

Comment puis-je simplement avoir '' au lieu de 0.00 ?


4 commentaires

La chaîne vide n'est pas une valeur valide pour money . Pourquoi ne pas simplement utiliser null ?


Ne fais pas ça. Aussi simple que cela. Gérez-le dans votre couche de présentation. '' n'est pas un nombre, il ne peut donc pas être stocké en tant que valeur money , et il est implicitement converti en 0 . Vous ne voulez certainement pas traiter vos chiffres comme un varchar (car je peux vous assurer que 100 est supérieur à 2 , pas moins que lui) alors laissez-le tel quel.


Le résultat va à la feuille Excel. Les exigences de l'utilisateur sont d'avoir un espace vide si NULL


Alors corrigez tout ce qui sort sur Excel, @Serdia. La plupart des applications n’affiche pas réellement NULL , elles affichent une "cellule" vide, donc quel que soit le processus ETL que vous utilisez, il met en fait "NULL". Corrigez le processus ETL. Ce ne sont vraiment que les IDE qui ont tendance à afficher NULL , car il est différent de '' lorsqu'il s'agit de chaînes.


3 Réponses :


2
votes

Comme d'autres l'ont dit, ne le faites pas. Mais si vous avez besoin de:

SELECT ISNULL(CONVERT(VARCHAR(9), occurrence_limit), '') AS occurrence_limit


1 commentaires

Juste pour expliquer pourquoi c'est mauvais: c'est que les valeurs ne sont plus numériques. Pour des choses importantes, comme l'argent, c'est un problème. '100' est inférieur à '2' , par exemple, et '17' + '2' est '172' .



0
votes
DROP table #testStak create table #testStak(nombre varchar(50),moneycant money)

INSERT INTO #testStak VALUES ('ALFA',10) 
INSERT INTO #testStak VALUES ('BETA',NULL) 
INSERT INTO #testStak VALUES ('GAMMA',5000)

SELECT nombre,ISNULL(CAST(moneycant AS varchar),'') FROM #testStak

2 commentaires

Non lié à la question


en fait, c'est une forme pour mettre un espace vide au lieu de 0,00 dans une colonne d'argent.



0
votes

Essayez ceci:

SELECT ISNULL(NULLIF(occurrence_limit, 0),'')  as occurrence_limit


0 commentaires