Поля CONCAT'ing NULL

У меня есть таблица с тремя полями, FirstName, LastName и электронной почтой.

Вот некоторые фиктивные данные:

FirstName | LastName | Email
Adam        West       adam@west.com
Joe         Schmoe     NULL

Теперь, если я делаю:

SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS

Наиболее важные части для Joe являются пустыми, поскольку существует единственное пустое поле. Как Вы преодолеваете это поведение? Кроме того, действительно ли это - поведение по умолчанию в SQL Server MS?

59
задан jkmartindale 10 July 2019 в 01:59
поделиться

5 ответов

Попытка

ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL

Итак,

CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL

вернет то же самое без проблемы с нулем (и пустой строки, где должны быть нули).

119
ответ дан 24 November 2019 в 18:00
поделиться
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS

рекомендуется, но если вы действительно подключились к CONCAT, оберните его в {fn}, и вы можете использовать функцию ODBC, например:

SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS

Если вам нужен первый <пробел> последний, но просто last, когда first имеет значение null, вы можете сделать следующее:

ISNULL(FirstName+' ','') + ISNULL(LastName,'')

Я добавил пробел к имени, которое может иметь значение null - это будет означать, что пробел будет существовать только в том случае, если FirstName имеет значение.

Чтобы соединить их все вместе с пробелом. между каждым:

RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
6
ответ дан 24 November 2019 в 18:00
поделиться

Вы всегда можете использовать параметр CONCAT_NULL_YIELDS_NULL ..

просто запустите SET CONCAT_NULL_YIELDS_NULL OFF , а затем все нулевые конкатенации приведет к тексту, а не к нулю ..

5
ответ дан 24 November 2019 в 18:00
поделиться

Ответ Стефана правильный. Чтобы исследовать немного глубже, вам нужно знать, что NULL - это не то же самое, что Nothing. Null представляет собой отсутствие значения или, другими словами, не определено. Ничто не представляет собой пустую строку, которая на самом деле является значением.

Undefined + something = undefined

Хороший лакомый кусок базы данных, за который нужно держаться!

3
ответ дан 24 November 2019 в 18:00
поделиться

SQL Server не имеет функции CONCAT .
(Обновление: начиная с MS SQL Server 2012 была введена функция CONCAT )

В поведении SQL Server по умолчанию значения NULL передаются через выражение.

В SQL Server можно было бы написать:

SELECT FirstName + LastName + Email as Vitals FROM MEMBERS

] Если вам нужно обработать NULL s:

SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS
2
ответ дан 24 November 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: