2016-07-20 20 views
1

で空白とnull値を置き換えます。私は次のクエリ持つSQL

ここ
Select 
    impressions, 
    COALESCE(u.company,u.email) AS Publisher 
FROM users AS u 

を、同社のフィールドは、会社名またはNullまたは空白値を持ちます。私はパブリッシャーの列に空白またはヌル値を持たせたくありません。

上記のステートメントは、その場合にu.email値を返すため、NULLに対して機能します。しかし、それは空白の値に対しては機能しません。だから私はやってみました:

COALESCE(NULLIF(u.company,''),u.email) 

これは空白の値が電子メールに置き換えられないため、動作していないようです。

誰かが間違っている場所を指摘できますか? 代替手段はありますか?多分

+0

しかし最適解はそれは醜いです...しかし、ケースu.companyはu.emailトリム(u.company)=「」その後、他のu.companyエンドu.email – Twelfth

+0

何その後、nullのときデータ型は 'u.company'ですか? –

+0

@ AaronD-u.companyはvarchar(256) – Cerberus

答えて

1

この:

COALESCE(NULLIF(u.company,u.email),u.email) 
+0

しかし、この場合、u.companyとu.emailを比較しませんか? 私は、会社のフィールドにnull値と空白値を取り除き、電子メールで置き換えようとしています。 – Cerberus

1

私はあなたが正しく何を言っているか理解していれば。

COALESCEは引数を順番に評価し、最初に評価されなかった最初の式の現在の値をNULLに戻します。

これは、あなたのステートメントがNULLのために働く理由と思われます。空白の値で動作しない場合は、文字列として評価された場合でも空白の値は技術的には値であるためです。また

、あなたはデータベースのテーブルは、あなたがでnull値を受け入れないようにテーブルを設定することができますnullまたはブランク値持つことができないを参照している場合:列を変更

ALERTのTABLE [テーブル名]を[カラム] INTEGER NOT NULL

Integerは、そのタイプでない場合は明らかに置き換えられます。これは、dbに送られたヌル値を処理するために正しく書かれていない場合でも、データベースと通信するコードの問題を引き起こします。

特定の列の値を、会社の値を電子メール値に置き換えるなど、別の列にある値で置き換えることができます。

UPDATE [table name] t 
SET t.[column name] = 
(SELECT [other column name from table2] FROM [table2 name] v 
WHERE t.[column name] = v.[column name from table2]); 
+0

あなたは正しいですが、会社の列の空白とヌル値を電子メールで置き換える方法はありませんか? – Cerberus

1

これは少し汚れていますが、動作します。 case文で置き換えたい各ケースを定義するだけです(誰かが2つまたは3つのスペースを入れる場合にはtrimを使います)。おそらくない

case when u.company is null then u.email 
    when trim(u.company) = '' then u.email 
else u.company 
end 
+0

最適ではないかもしれませんが、これは理にかなっています! – Cerberus

関連する問題