2016-10-19 6 views
0

2つのnvarchar列を連結しようとしているSQL 2012のビューがあります。いずれかの値がNULLの場合は、nullを戻します。ヌルを含む2つの列を連結する

私はconcat関数を試してみました、私はSET CONCAT_NULL_YIELDS_NULL OFF を試してみました私は(列名)をISNULLを使用しようとしましたが、それでも、それはここではヌル

を返すには、私のクエリです:

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 

任意の提案感謝されます。

答えて

1

使用CONCAT

CONCAT[Document Number],[Dunning Block]) 

CONCATはヌル

CONCAT文字列引数の可変数を受け取り、単一の文字列にそれらを連結を無視します。最小2つの入力値が必要です。それ以外の場合は、エラーが発生します。すべての引数は暗黙的に文字列型に変換され、連結されます。ヌル値は暗黙のうちに空の文字列に変換されます

0

SET CONCAT_NULL_YIELDS_NULL OFFは値を連結するためにのみ機能し、すべての値がNULLであればNULLを返します。あなたの質問タイトルにもかかわらず、両方の列にNULL値があると思われます。あなたがデータを検査しただけであれば、あなたのアプローチはおそらくうまくいくでしょう。

ISNULLは、状況に正常に動作していますが、それはNULL可能かもしれ関与両方の列でそれを行うことを確認する必要があり:サイドノートで

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 

を、ここでTOP 100 PERCENTを使用すると、何もしません - それは何もしません。

0

あなたが必要ISNULL

ISNULL(YourNullableField,'') 
関連する問題