it-swarm.com.de

Wie überprüfe ich, ob eine SQL Server-Zeichenfolge null oder leer ist

Ich möchte nach Daten suchen, sie jedoch ignorieren, wenn sie null oder leer sind. Derzeit lautet die Abfrage wie folgt ...

Select              
Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id      

Ich möchte aber company.OfferText erhalten, wenn listing.Offertext eine leere Zeichenfolge ist und wenn es null ist.

Was ist die leistungsstärkste Lösung?

212
digiguru

Ich denke das:

SELECT 
  ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text
FROM ...

ist die eleganteste Lösung.

Und um es ein bisschen in Pseudo-Code zu zerlegen:

// a) NULLIF:
if (listing.Offer_Text == '')
  temp := null;
else
  temp := listing.Offer_Text; // may now be null or non-null, but not ''
// b) ISNULL:
if (temp is null)
  result := true;
else
  result := false;
401
Martin Ba
SELECT
   CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText 
        ELSE COALESCE(Company.OfferText, '') END 
   AS Offer_Text,

... 

Wenn in diesem Beispiel listing.OfferText NULL ist, sollte die LEN () -Funktion ebenfalls NULL zurückgeben, aber das ist immer noch nicht> 0.

pdate

Ich habe einige Dinge in den 5 1/2 Jahren seit dem Posten gelernt und mache es jetzt ganz anders:

COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '')

Dies ähnelt der akzeptierten Antwort, hat jedoch auch einen Fallback für den Fall, dass Company.OfferText Ebenfalls null ist. Keine der anderen aktuellen Antworten, die NULLIF() verwenden, tun dies ebenfalls.

51
Joel Coehoorn
Select              
CASE
    WHEN listing.OfferText is null or listing.OfferText = '' THEN company.OfferText
    ELSE COALESCE(Company.OfferText, '')
END As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id
34

Hier ist eine andere Lösung:

SELECT Isnull(Nullif(listing.offertext, ''), company.offertext) AS offer_text, 
FROM   tbl_directorylisting listing 
       INNER JOIN tbl_companymaster company 
         ON listing.company_id = company.company_id
18
unclefofa

Sie können ISNULL verwenden und die Antwort mit der bekannten Ausgabe vergleichen:

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST
13
Code Trawler

In SQL Server 2012 haben Sie IIF, z. B. können Sie es wie verwenden

SELECT IIF(field IS NULL, 1, 0) AS IsNull

Ebenso können Sie prüfen, ob das Feld leer ist.

11
lkurylo

Verwenden Sie die LEN-Funktion, um nach Null- oder Leerwerten zu suchen. Sie können einfach LEN (@SomeVarcharParm)> 0 verwenden. Dies gibt false zurück, wenn der Wert NULL, '' oder '' ist. Dies liegt daran, dass LEN (NULL) NULL und NULL> 0 false zurückgibt. Außerdem gibt LEN ('') 0 zurück. Überzeugen Sie sich selbst:

SELECT 
 CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
 CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
 CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
 CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
 CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END
5
Zach Johnson
Select              
Coalesce(NullIf(listing.OfferText, ''), NullIf(company.OfferText, ''), '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id

Diese einfache Kombination aus COALESCE und NULLIF sollte den Trick machen:

SELECT             
  Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text
...

Hinweis: Fügen Sie eine weitere leere Zeichenfolge als letztes COALESCE-Argument hinzu, wenn die Anweisung eine leere Zeichenfolge anstelle von NULL zurückgeben soll, wenn beide Werte NULL sind.

4
contactmatt

Ich weiß, dass dies ein alter Thread ist, aber ich habe gerade einen der vorhergehenden Beiträge gesehen und er ist nicht korrekt.

Wenn Sie LEN (...) verwenden, um zu bestimmen, ob das Feld NULL oder EMPTY ist, müssen Sie es wie folgt verwenden:

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...
3
Milan

Hier ist eine Lösung, aber ich weiß nicht, ob es die beste ist ...

Select              
Coalesce(Case When Len(listing.Offer_Text) = 0 Then Null Else listing.Offer_Text End, company.Offer_Text, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id
3
digiguru

diese Syntax:

SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

arbeitete für mich in Microsoft SQL Server 2008 (SP3)

3
Romain Durand
SELECT              
    COALESCE(listing.OfferText, 'company.OfferText') AS Offer_Text,         
FROM 
    tbl_directorylisting listing  
    INNER JOIN tbl_companymaster company ON listing.company_id= company.company_id
3
Anoop Verma
[Column_name] IS NULL OR LEN(RTRIM(LTRIM([Column_name]))) = 0
2
user3829854

So verhindern Sie, dass Datensätze mit dem Wert Empty oder Null im SQL-Ergebnis angezeigt werden

wir können einfach hinzufügen ..... WHERE Column_name != '' or 'null'

2
Code Crawler