2017-09-01 3 views
2

J'essaie de supprimer la possibilité d'espaces vides par une valeur inexistante dans la base de données lors de la création de la vue pour ma recherche. Le problème que je rencontre est que mon instruction CASE ne fonctionne pas correctement lorsque j'essaie de rechercher une valeur NULL ou une valeur vide. Il semble fonctionner pour ceux qui sont nuls mais le blanc ne semble pas avoir autant de chance. Dans ce cas, je suis en train de vérifier nul ou vide de importantFieldComment vérifier si le champ est vide et vide?

CREATE VIEW Lookup4 AS 
SELECT TOP 140000 CONCAT(no, 
    CASE WHEN (importantField is null OR importantField = '') 
     THEN '' ELSE ' ' + importantField END, 
      fieldname + ' ', anotherField2) AS UNRELATEDFIELD, Code, 
    CASE NAME 
     WHEN '101,,,,,' THEN 'value1e' 
     WHEN '14,,,,,' THEN 'value3' 
     WHEN '16,,,,,' THEN 'value4' 
    END AS NAME 
FROM dbo.Lookup 
+0

Vous avez un _expression_ de cas, et _columns_. – jarlh

+1

S'il vous plaît vérifier cette question - https://stackoverflow.com/questions/45461543/sql-isnull-is-not-working-and-returns-a-value-even-if-it-is-a-space –

+0

avec. longueur je reçois "ne pouvait pas être lié" erreur. – DevAL

Répondre

1

Est-ce que vous êtes après

CREATE VIEW Lookup4 AS 
SELECT TOP 140000 CONCAT(no, 
    CASE WHEN (ISNULL(importantField,'') = '') 
     THEN '' ELSE ' ' + importantField END, 
      fieldname + ' ', anotherField2) AS UNRELATEDFIELD, Code, 
    CASE NAME 
     WHEN '101,,,,,' THEN 'value1e' 
     WHEN '14,,,,,' THEN 'value3' 
     WHEN '16,,,,,' THEN 'value4' 
    END AS NAME 
FROM dbo.Lookup 
+0

La fonction isnull nécessite 2 argument (s). Des idées? – DevAL

+0

vos balises étaient SQL et SSMS, ce qui a suggéré MS SQL TSQL et SQL Server Management Studio. ISNULL dans TSQL a 2x arguments et mon échantillon a 2 x arguments ISNULL (fieldToCheck, ReplacementValueIfNull) –

+0

Il semblait avoir fonctionné en cours d'exécution une seconde fois sans aucun changement. Peut-être suggérer qu'il y a un problème avec les données dans la base de données, bravo. – DevAL

0

Si vous voulez seulement vérifier nulle et non pour les chaînes vides, alors vous pouvez également utiliser IFNULL que vous avez essayé. Mais cela ne convient pas non plus aux chaînes vides.

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 
    from tablename 
+0

sont sûrs que cette réponse est correcte. –

0

Essayez de changer:

importantField is null 

avec

IsNull(importantField) 
1
CREATE VIEW Lookup4 AS 
SELECT TOP 140000 CONCAT(no,ifnull(importantField,'')<>'', 
      fieldname + ' ', anotherField2) AS UNRELATEDFIELD, Code, 
    CASE NAME 
     WHEN '101,,,,,' THEN 'value1e' 
     WHEN '14,,,,,' THEN 'value3' 
     WHEN '16,,,,,' THEN 'value4' 
    END AS NAME 
FROM dbo.Lookup 
+0

La fonction isnull nécessite 2 argument (s). Des idées? – DevAL

+0

vous pouvez également utiliser isnull même manière que si –

0

Modifications mineures ac cordonnet à votre résultat

Méthode 1:

Select * 
    From dbo.Lookup 
    Where IsNull(importantField, '') = '' 

Méthode 2:

Select * 
    From dbo.Lookup 
    Where (importantField is NULL or importantField = '')