web-dev-qa-db-ja.com

SQL Serverでnull intフィールドのvarcharへのキャストを制御するにはどうすればよいですか?

まず最初に、CASTNULLフィールドでどのように機能し、値がNULLである場合にどのように動作するかを知りたいです。

式の例:

(CAST(INT_FIELD as nvarchar(100))

INT_FIELDNULLの場合はどうなりますか?

その理由は、私が次のことをしようとしているからです。

SELECT (CAST(INT_FIELD as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;

SOME_OTHER_FIELDがnullでなくても、NULLを取得しています。 NULL + something = NULLという何らかのロジックがあると思いますが、よくわかりません。

この動作を制御するにはどうすればよいですか?

17
TheBoyan

[〜#〜] isnull [〜#〜] または [〜#〜] coalesce [ 〜#〜]NULLの間のほとんどの行操作はNULLになります。 [〜#〜] cast [〜#〜]NULLの戻り値はNULLNULL +何かがNULLでもあります。あなたの例では、このようなことをする必要があります:

SELECT ISNULL(CAST(INT_FIELD as nvarchar(100)),'') + ' ' + ISNULL(SOME_OTHER_FIELD,'')
FROM SOME_TABLE;

もちろん、私の例では、両方のフィールドがNULLの場合、 ''の代わりに ''を返しますが、アイデアは得られます。

28
Lamak

COALESCEを見てください。ここでは、最初の非NULLを見つけ、すべてがNULLの場合は0を返します。例:

SELECT (CAST(COALESCE(INT_FIELD,0) as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;
4
downforce

COALESCEを使用してみてください

SELECT COALESCE(CAST(INT_FIELD as nvarchar(100), '') + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;
4
Vinay

通常、NULL +(-、/、*など)something = NULL。使用できます

SELECT ISNULL(CAST(INT_FIELD as nvarchar(100)),'') 
+ ' ' + ISNULL(SOME_OTHER_FIELD FROM SOME_TABLE,'')

または、SET CONCAT_NULL_YIELDS_NULL OFF詳細

2
a1ex07