2016-10-19 1 views
0

Ich habe eine Sicht auf SQL 2012, wo ich versuche, 2 nvarchar Spalten zu verketten. Es gibt Nullen zurück, wenn einer der Werte null ist.Verkettung von zwei Spalten, wobei eine Null enthält

ich die concat-Funktion versucht haben, habe ich versucht, SET CONCAT_NULL_YIELDS_NULL OFF Ich habe versucht, verwenden isnull (Spaltenname), aber immer noch ist es Rückkehr nulls

Hier ist meine Frage:

SELECT TOP (100) PERCENT Assignment 
         ,[Document Number]+[Dunning Block] AS [Document Number] 
         ,[Document Type] 
         ,[Document Date] 
         ,[Special G/L Indicator] 
         ,[Amount in local currency] 
         ,[Local Currency] 
         ,[Clearing Document] 
         ,Text 
         ,Account 
         ,Reference 
         ,[Dunning block] 
         ,[Invoice reference] 
         ,SUBSTRING(strDoc_Date, 1, 4) AS Year 
         ,CASE WHEN SUBSTRING(strDoc_Date, 1, 4) = '2013' 
          THEN CASE WHEN SUBSTRING(strDoc_Date, 6, 2) = '01' 
           THEN CASE WHEN CAST(SUBSTRING(strDoc_Date, 9, 2) AS integer) > 25 THEN '02' 
             ELSE SUBSTRING(strDoc_Date, 6, 2) END 
           ELSE SUBSTRING(strDoc_Date, 6, 2) END 
          ELSE SUBSTRING(strDoc_Date, 6, 2) END AS Period 
         , SUBSTRING(strDoc_Date, 9, 2) AS Day 
FROM dbo.Zcustage 

Irgendwelche Vorschläge würde geschätzt werden.

Antwort

1

Verwenden CONCAT

CONCAT[Document Number],[Dunning Block]) 

CONCAT Ignoriert nulls

CONCAT nimmt eine variable Anzahl von Argumenten und Zeichenfolge verkettet sie zu einem einzigen String. Es erfordert mindestens zwei Eingabewerte. Andernfalls wird ein Fehler ausgelöst. Alle Argumente werden implizit in Zeichenfolientypen konvertiert und dann verkettet. Nullwerte werden implizit in einen leeren strin umgewandelt

0

SET CONCAT_NULL_YIELDS_NULL OFF nur Werte für verketten funktionieren würde und NULL-, wenn alle Werte NULL sind, können Sie immer noch NULL bekommen. Ich vermute, dass beide Spalten NULL-Werte enthalten, trotz Ihres Fragetitels - wahrscheinlich hätte jeder Ihrer Ansätze funktioniert, wenn Sie nur die Daten überprüft hätten.

ISNULL sollte für Ihre Situation funktionieren, aber stellen Sie sicher, dass Sie tun es auf beiden Spalten beteiligt, dass nullable sein könnte:

SELECT TOP (100) PERCENT Assignment, 
         ISNULL([Document Number],'') + ISNULL([Dunning Block], '') AS [Document Number], 
         [Document Type], 
         [Document Date], 
         [Special G/L Indicator], 
         [Amount in local currency], 
         [Local Currency], 
         [Clearing Document], 
         Text, 
         Account, 
         Reference, 
         [Dunning block], 
         [Invoice reference], 
         SUBSTRING(strDoc_Date, 1, 4) AS Year, 
         CASE 
          WHEN SUBSTRING(strDoc_Date, 1, 4) = '2013' THEN 
          CASE 
           WHEN SUBSTRING(strDoc_Date, 6, 2) = '01' THEN 
           CASE 
            WHEN CAST(SUBSTRING(strDoc_Date, 9, 2) AS INTEGER) > 25 THEN '02' 
            ELSE SUBSTRING(strDoc_Date, 6, 2) 
           END 
           ELSE SUBSTRING(strDoc_Date, 6, 2) 
          END 
          ELSE SUBSTRING(strDoc_Date, 6, 2) 
         END AS Period, 
         SUBSTRING(strDoc_Date, 9, 2) AS Day 
FROM dbo.Zcustage 

hier auf einer Seite beachten, mit TOP 100 PROZENT ist ein No-op - es macht nichts.

0

Sie benötigen ISNULL

ISNULL(YourNullableField,'') 
Verwandte Themen