2017-10-16 1 views
0

現在、入力データ(パイプで区切られたcsvファイルから各列の周りに二重引用符がある)私は同時に最初の列(nvarchar列)を合体しようとしていますが、二重引用符を削除したときと同じように動作するように合体文を取得できません。SQLは列を空白として認識しません(NULL )。本当に私はSQLの列1は、一度「」を取り除くことを認識させるために何ができるか上の任意のヘルプをお願い申し上げ SQLサーバーの ""としてヌルとして ""の置換を認識しました

は、ブランクの今いっぱいであるため!コラム2、3または4からデータを取得する必要があり

Insert Into [mytable] 
Select COALESCE (REPLACE (Column1,'"', ''), REPLACE (Column 2, '"', ''), 
REPLACE (Column3, '"', ''), REPLACE (Column4, '"', '')) 
From [datasource] 
+0

''はnullではありません。ヌルではなくカラムに空の文字列を書きます。あなたのクエリで ''をnullに置き換えてみてください – GuidoG

+0

ありがとうございます@GuidoG、これは確かに問題でしたが、一部のレコードにはデータが含まれていましたので、引用符を削除したいだけで全体のフィールドを無効にしませんでした – Sam109

答えて

0

かなり面倒な、しかし、あなたはLTRIMとしてNULLIFを使用することができます。

Select COALESCE (NULLIF(LTRIM(REPLACE (Column1,'"', '')), ''), 
       REPLACE (Column 2, '"', ''), 
       REPLACE (Column3, '"', ''), 
       REPLACE (Column4, '"', '')) 
From [datasource] 

LTRIMはあなたの文字列からすべての主要な空白を削除します。空白文字のみを含む場合、LTRIMは空の文字列を返します。 NULLIFは、2つの引数がisに渡された場合、nullを返します。

私の例は、最初の列のみです。必要に応じて他の列で使用します。

+0

ありがとうございます!これは完全に動作します – Sam109

+0

助けてくれてありがとう:-) –

0

あなたはCASE表現を使用できます。私はこのクエリの醜さのいくつかは、あなたのデータモデルによるものであることを感じて

INSERT INTO [mytable] 
SELECT 
    CASE WHEN LEN(REPLACE(COALESCE(Column1, ''), '"', '')) > 0 
     THEN REPLACE(COALESCE(Column1, ''), '"', '') 
     WHEN LEN(REPLACE(COALESCE(Column2, ''), '"', '')) > 0 
     THEN REPLACE(COALESCE(Column2, ''), '"', '') 
     CASE WHEN LEN(REPLACE(COALESCE(Column3, ''), '"', '')) > 0 
     THEN REPLACE(COALESCE(Column3, ''), '"', '') 
     WHEN LEN(REPLACE(COALESCE(Column4, ''), '"', '')) > 0 
     THEN REPLACE(COALESCE(Column4, ''), '"', '') 
     ELSE '' END 
FROM [datasource] 

を。理想的には、二重引用符は実際のコンテンツだけを格納することはありません。次に、NULLまたは空の文字列を使用して、挿入するコンテンツを決定します。

+0

申し訳ありません二重引用符を格納したくない!置き換えの目的は、私のデータベースにアップロードするときにそれらを取り除くことです。しかし、二重引用符を取り除くためにreplaceを使用すると、sqlはColumn1がnullではないことを認識しません。空白として表示されます。合体が機能しません。 – Sam109

+0

@ Sam109そのことについては) ? –

1
Insert Into [mytable] 
Select NULLIF(COALESCE (REPLACE (Column1,'"', ''), REPLACE (Column 2, '"', ''), 
REPLACE (Column3, '"', ''), REPLACE (Column4, '"', '')),'') 
From [datasource] 
+0

ありがとう - これはColumn1を 'null'として認識しますが、合体機能は実行しません – Sam109

関連する問題