.net333 Ответов: 3

Функция Coalesce не работает, когда данные столбца равны нулю


Привет ребята,
Я написал сохраненный proc, чтобы получить информацию о клиенте на основе электронной почты пользователя или номера телефона. я использовал coalesce, чтобы написать этот sp. я получил результаты, когда существуют данные столбцов электронной почты пользователя и номера телефона. но я не могу получить результаты, когда данные столбца равны нулю.
Пожалуйста, помогите мне исправить это.
Спасибо

Что я уже пробовал:

select UserId,UserEmail,Code,PhoneNo,Name,UserImage,U.CreatedDateTime,A.Country,U.UserImageUrl,
 from Users U ,Address A where
[UserEmail]=coalesce('email@gmail.com',UserEmail)  and
[PhoneNo]=coalesce(null,PhoneNo) and 
A.Id=U.AddressId 
and A.CreatedUserId=U.UserId

Richard Deeming

NB: Вам следует избегать использования (устаревших) соединений старого стиля и вместо этого использовать синтаксис соединения ANSI-92:

from Users U INNER JOIN Address A ON A.Id = U.AddressId And A.CreatedUserId = U.UserId

.net333

Спасибо, Ричард. я буду следовать за ANSI-92.

3 Ответов

Рейтинг:
9

an0ther1

Coalesce возвращает первое ненулевое значение из вашего выражения-refer;
MSDN-COALESCE (Transact-SQL)[^]
Возможно, вам следует использовать ISNULL-refer;
ISNULL (Transact-SQL) | Microsoft Docs[^]

с уважением


Maciej Los

А4! Обратиться к документации-это всегда хороший вариант, но вы должны объяснить, что OP делает неправильно.

an0ther1

Спасибо Мацей

.net333

Спасибо an0ther1. я передам документы

an0ther1

Никаких проблем, приятель.
Я прочитал ваш ответ Мачею - если вам нужно получить либо номер телефона, либо адрес электронной почты, вы можете использовать coalesce следующим образом
[ContactPhoneEmail] = COALESCE(UserEMail, PhoneNumber, 'email@gmail.com')

Овации

.net333

Я решил эту проблему с помощью
COALESCE([Useremail],")=coalesce (@Email, [UserEmail],") и
Сливаются([PhoneNo],")=коалесцируют(@номер телефона[PhoneNo],").

Он обрабатывает нулевые значения с помощью функции coalesce

Рейтинг:
20

.net333

Я решил эту проблему с помощью

COALESCE([Useremail],'')=coalesce(@Email,[UserEmail],'') and
COALESCE([PhoneNo],'')=coalesce(@PhoneNumber,[PhoneNo],'')


Он обрабатывает нулевые значения с помощью функции coalesce


Maciej Los

+5 как стимул к работе/учебе.

Рейтинг:
17

Maciej Los

В этот момент coalesce возвращается всегда email@gmail.com, так как он не равен нулю.

Итак, замените:

[UserEmail]=coalesce('email@gmail.com',UserEmail)

с:
[UserEmail]=coalesce(UserEmail,'email@gmail.com')


КСТАТИ:
Я не понимаю, как это делается.: [PhoneNo]=coalesce(null,PhoneNo). Это означает: замените null первым ненулевым значением PhoneNo.
Проверьте документацию следующим образом an0ther1[^] упоминается в его анвере.


.net333

Спасибо Мацей Лос. Мне нужно получить данные пользователя с электронной почтой или номером телефона. Вот почему я использовал функцию coalesce.

.net333

Я решил эту проблему с помощью
COALESCE([Useremail],")=coalesce (@Email, [UserEmail],") и
Сливаются([PhoneNo],")=коалесцируют(@номер телефона[PhoneNo],").

Он обрабатывает нулевые значения с помощью функции coalesce

Maciej Los

Отлично!
Овации,
Мацей