Как управлять приведением поля null int к varchar в sql server? - PullRequest
17 голосов
/ 26 сентября 2011

Прежде всего я хотел бы знать, как CAST работает с NULL полями и как он ведет себя, когда значение равно NULL?

Например, в выражении:

(CAST(INT_FIELD as nvarchar(100))

что происходит, если значение INT_FIELD равно NULL?

Причина в том, что когда я пытаюсь сделать следующее:

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

Я получаю NULL, хотя SOME_OTHER_FIELD не равен нулю. Я предполагаю, что в этом есть какая-то логика, что NULL + something = NULL, но я не уверен.

Как я могу контролировать это поведение?

Ответы [ 4 ]

28 голосов
/ 26 сентября 2011

Вам необходимо использовать ISNULL или COALESCE , так как большинство операций строки между NULL приведет к NULL. CAST из NULL возвращает NULL и NULL + что-то также NULL. В вашем примере вы должны сделать что-то вроде этого:

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

Конечно, в моем примере, если оба поля NULL, он вернет '' вместо '', но вы поймете идею.

4 голосов
/ 26 сентября 2011

Попробуйте использовать COALESCE

SELECT COALESCE(CAST(INT_FIELD as nvarchar(100), '') + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;
4 голосов
/ 26 сентября 2011

Посмотрите на COALESCE, где вы можете найти первое ненулевое значение и вернуть 0, если все равно NULL, например:

SELECT (CAST(COALESCE(INT_FIELD,0) as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;
2 голосов
/ 26 сентября 2011

Обычно NULL + (-, /, * и т. Д.) something = NULL.Вы можете использовать

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

или SET CONCAT_NULL_YIELDS_NULL OFF ( подробнее )

...