簡體   English   中英

SQL Server 2008中的ISNULL

[英]ISNULL in SQL Server 2008

今天我在SQL中遇到了一個奇怪的ISNULL函數問題

我有表包含客戶信息我必須顯示連接的全名First,Middle Initial和Last Name,在表中我知道Middle Initial是一個可以為空的列。

所以我在SQL中使用了ISNULL函數來返回Middle Initial,如果它不是null,它工作正常,但是我使用了ISNULL函數,下面有一個表達式,如果MI為null,我理想情況下不應該工作,但有趣的是它工作了。

SELECT FirstName + ' ' + LastName + ' '+ ISNULL(MI + '.', '') As MiddleInitial 
FROM CS_tblMaster WHERE CustomerNo = 2627240

以上SOL Query應該將MiddleInitial作為“。”返回給我。 當MiddleInitial為null時,它確實返回為空字符串。

所以我寫了另一個查詢如下。

SELECT (MI + '.') AS MiddleInitial FROM CS_tblMaster WHERE CustomerNo = 2627240

再次給出為NULL

不知何故,當您將字符串與NULL值連接時,它將返回null。 我想了解這個實現。

有人可以幫忙嗎

如果您想在MI為空時設置一個句點,請使用:(您只是在錯誤的位置使用'.'

SELECT FirstName + ' ' + LastName + ' '+ ISNULL(MI, '.') As MiddleInitial FROM CS_tblMaster WHERE CustomerNo = 2627240

- 原始聲明

SELECT FirstName + ' ' + LastName + ' '+ ISNULL(MI + '.', '') As MiddleInitial 
FROM CS_tblMaster WHERE CustomerNo = 2627240

- 我的原始答案(已編輯)

SELECT FirstName + ' ' + LastName + ' '+ (ISNULL(MI, '') + '.') As MiddleInitial 
FROM CS_tblMaster WHERE CustomerNo = 2627240

在這種情況下,SQL首先檢查MI是否為Null,如果不為Null則使用MI,如果是,則使用空字符串。 然后它將該結果與句點連接起來,現在這個結果現在永遠不會為空。

- 最后的答案

SELECT 
    FirstName + ' ' + LastName + ' '
        + CASE WHEN MI IS NULL THEN '' ELSE MI + '.' END As MiddleInitial 
FROM CS_tblMaster WHERE CustomerNo = 2627240

@Satish,不確定你是否覺得你有答案,因為你還沒有選擇,我很抱歉,如果我的答案簡短而快速。 看到所有回復讓我意識到當我第一次看到它時,我對你的問題沒有多想。

要回答“我想了解這個實現”,Nulls在SQL中是一個完全特殊的值。 不是空字符串,不是空格,不是零。 從字面意義上講,它們意味着“沒有”。 您可以檢查它們,可以看到,如果事情零。 但你不能用Null“做”事情。 所以57 + Null = Null。 'Mary'+ Null = Null。 ((12 * 37)+568)/ Null = Null。 'Albert','Mary',Null和'Zeke'的Max()是空的。 這篇文章http://en.wikipedia.org/wiki/Null_(SQL)可能有所幫助,在Null Propagation一節中有一個不錯的描述。

Isnull函數不是Null的測試,而是一種處理它的方法。 因此,要測試某些內容是否為空,您將在Select中使用ColumnName Is Null或ColumnName Is Null。 Isnull(MI,'')說的是:我想要一個值,如果MI的值不為null,那么我想要MI,否則我想要一個空字符串。

繼續,我不確定我最初是否理解你實際上要做的事情。 如果你試圖得到一個中間的首字母為空的時期,那么我原來的答案和其他大多數都適合你。 但我想你可能會試着說:如果我有一個中間的首字母,那么我想要中間的首字母,然后是一段時間。 如果我沒有中間首字母那么我什么都不想:'Alberto C. Santaballa'或'Alberto Santaballa',從來沒有'Alberto。 Santaballa”。 如果是這種情況,則在編輯的答案中使用最終語句。

@Zec,謝謝你的編輯。 錯字是太快打字的另一個產物! : - /

如果連接到null,則得到null。 走出戶外時期。 Isnull(MI,'')+'。'

這樣的事情會對你有用嗎......

    SELECT FirstName + ' ' + LastName + ' '+ CASE WHEN MI is null then '.' else MI END As MiddleInitial 
        FROM CS_tblMaster WHERE CustomerNo = 2627240
END

兄弟,我猜你是誤解isnull功能

ISNULL([Columns To Check],[Replaced String]) 

SELECT FirstName + ' ' + LastName + ' '+ ISNULL(MI + '.', '') As MiddleInitial 
FROM CS_tblMaster WHERE CustomerNo = 2627240

ISNULL函數引用是要檢查的列為null,然后將其替換為其他字符串

在您的查詢中,您正在嘗試替換您的MI +'。' 列到空字符串,希望我的解釋可以幫助你=)

那么NULLIF:

SELECT FirstName +''+ LastName +''+ ISNULL((NULLIF(MI +'。','。'),'')作為MiddleInitial FROM CS_tblMaster WHERE CustomerNo = 2627240

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM