Обработка нуля в MS SQL Server 2008 - PullRequest
       23

Обработка нуля в MS SQL Server 2008

0 голосов
/ 29 сентября 2011

Я не администратор базы данных SQL, и у меня возникла проблема. Мы запустили сервер MS SQL 2008 и только что обновили его с MS SQL 2000. Я пытаюсь выполнить запрос, созданный для БД в MS SQL 2000, и использовать результаты для нашего списка рассылки.


Запрос:

SELECT DISTINCT Title, FirstName, MiddleInitial, LastName, Suffix, 
CompanyName, BAddress, BAddress2, BCity, BState, BZip
FROM MailingExportView
WHERE     AdvanceMailing = 0 
ORDER BY BZip, LastName

Что возвращает нам нечто похожее на:

Title   FirstName   MiddleInitial   LastName    Suffix  CompanyName BAddress    BAddress2   BCity   BState  BZip
Mr. Bob NULL    Smith   NULL    NULL    12345 Main , Anytown    State, NULL NULL

Я бы не хотел получать значение NULL. Если в идеале поле пустое, я бы хотел, чтобы оно вернулось пустым.

Я читал о Null Processing с других сайтов и здесь;

http://technet.microsoft.com/en-us/library/ms170707.aspx

Я попытался изменить это так, чтобы ISNULL поместил нули в другую таблицу:

Как заменить пустые (нулевые) значения на 0 для всех записей?

http://bytes.com/topic/sql-server/answers/888443-convert-null-blank-if-not-null-remove-commas-string

http://www.w3schools.com/sql/sql_isnull.asp

Я в растерянности. Кто-нибудь может мне помочь?

Ответы [ 6 ]

2 голосов
/ 29 сентября 2011

Если все, что вам нужно, это пустое значение вместо нуля, попробуйте

COALESCE(FieldThatMayBeNull, '') as FieldThatMayBeNull

2 голосов
/ 29 сентября 2011

Оберните COALESCE вокруг столбцов, где вы хотите получить пробелы

COALESCE(MiddleInitial,'') AS MiddleInitial   

повторите для других столбцов

1 голос
/ 29 сентября 2011

Не показывая нам, что вы пытались понять, в чем заключается ваша проблема.

При этом существует два стандартных способа преобразования нулевого значения в значение по умолчанию для выбора.ISNULL и COALESCE.CASE это тоже опция, но я все равно включил ее

SELECT DISTINCT 
   Title, 
   FirstName, 
   COALESCE(MiddleInitial, '') MiddleInitial, 
   LastName, 
   ISNULL(Suffix,'') Suffix, 
   CompanyName, 
   CASE WHEN BAddress IS NULL THEN '' ELSE BAddress END BAddress, 
1 голос
/ 29 сентября 2011

Измените выбор на ISNULL(Column, '') для любого потенциально нулевого поля ...

SELECT DISTINCT 
     ISNULL(Title, '') AS Title, 
     ISNULL(FirstName, '') FirstName, 
     ISNULL(MiddleInitial, '') MiddleInitial, 
     ISNULL(LastName, '') LastName, 
     ISNULL(Suffix, '') Suffix, 
     ISNULL(CompanyName, '') CompanyName, 
     ISNULL(BAddress, '') BAddress, 
     ISNULL(BAddress2, '') BAddress2, 
     ISNULL(BCity, '') BCity, 
     ISNULL(BState, '') BState, 
     ISNULL(BZip, '') BZip
FROM MailingExportView
WHERE     AdvanceMailing = 0 
ORDER BY BZip, LastName
0 голосов
/ 29 сентября 2011
SELECT DISTINCT
COALESCE(Title,'') Title,
COALESCE(FirstName,'') FirstName,
COALESCE(MiddleInitial,'') MiddleInitial,
COALESCE(LastName,'') LastName,
COALESCE(Suffix,'') Suffix,
COALESCE(CompanyName,'') CompanyName,
COALESCE(BAddress,'') Baddress,
COALESCE(BAddress2,'') Baddress2,
COALESCE(BCity,'') BCity,
COALESCE(BState,'') BState,
COALESCE(BZip,'') BZip
FROM MailingExportView
WHERE AdvanceMailing = 0 
ORDER BY BZip, LastName ;
0 голосов
/ 29 сентября 2011

Полагаю, вы могли бы использовать функцию ISNULL () в вашем случае, как показано ниже:

    SELECT DISTINCT ISNULL(Title, ''), ISNULL(FirstName, ''), ISNULL(MiddleInitial, ''), ISNULL(LastName, ''), ISNULL(Suffix, ''),  ISNULL(CompanyName, ''), ISNULL(BAddress, ''), ISNULL(BAddress2, ''), ISNULL(BCity, ''), ISNULL(BState, ''), ISNULL(BZip, '') FROM MailingExportView WHERE     AdvanceMailing = 0  ORDER BY BZip, LastName 
...