[sql-server-2005] SQL Server 문자열이 null인지 또는 비어 있는지 확인하는 방법

데이터를 확인하고 싶지만 null이거나 비어 있으면 무시하십시오. 현재 쿼리는 다음과 같습니다.

Select              
Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id      

그러나 빈 문자열이고 null 인 경우 company.OfferText 를 얻고 싶습니다 listing.Offertext.

가장 성능이 좋은 솔루션은 무엇입니까?



답변

나는 이것을 생각 해요:

SELECT 
  ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text
FROM ...

가장 우아한 솔루션입니다.

그리고 의사 코드로 조금 세분화하려면 :

// a) NULLIF:
if (listing.Offer_Text == '')
  temp := null;
else
  temp := listing.Offer_Text; // may now be null or non-null, but not ''
// b) ISNULL:
if (temp is null)
  result := true;
else
  result := false;


답변

SELECT
   CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText 
        ELSE COALESCE(Company.OfferText, '') END 
   AS Offer_Text,

... 

이 예에서 listing.OfferTextNULL 인 경우 LEN () 함수도 NULL을 반환해야하지만 여전히 0보다 크지 않습니다.

최신 정보

나는 이것을 게시 한 후 5 1/2 년 동안 몇 가지를 배웠으며 지금은 크게 다르게 행동합니다.

COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '')

이것은 허용되는 답변과 비슷하지만 Company.OfferTextnull 인 경우 에도 대체 가 있습니다. 다른 현재 답변 중 어느 것도이 NULLIF()작업을 수행하지 않습니다.


답변

Select              
CASE
    WHEN listing.OfferText is null or listing.OfferText = '' THEN company.OfferText
    ELSE COALESCE(Company.OfferText, '')
END As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id


답변

또 다른 해결책은 다음과 같습니다.

SELECT Isnull(Nullif(listing.offertext, ''), company.offertext) AS offer_text,
FROM   tbl_directorylisting listing
       INNER JOIN tbl_companymaster company
         ON listing.company_id = company.company_id


답변

ISNULL알려진 출력에 대해 답변을 사용 하고 확인할 수 있습니다 .

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST


답변

SQL Server 2012 IIF에서는 예를 들어 다음과 같이 사용할 수 있습니다.

SELECT IIF(field IS NULL, 1, 0) AS IsNull

필드가 비어 있는지 확인할 수있는 것과 같은 방법입니다.


답변

LEN 함수를 사용하여 널 또는 빈 값을 점검하십시오. LEN (@SomeVarcharParm)> 0 만 사용할 수 있습니다. 값이 NULL, ”또는 ”이면 false를 반환합니다. LEN (NULL)은 NULL을 반환하고 NULL> 0은 false를 반환하기 때문입니다. 또한 LEN ( ”)은 0을 반환합니다.

SELECT
 CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
 CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
 CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
 CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
 CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END