2012-03-29 122 views
25

使用SQL Server 2005時,我如何獲得下面的語句或者輸出如我所願。將NULL轉換爲空字符串 - 將字符串轉換爲uniqueidentifier時轉換失敗

SELECT Id 'PatientId', 
     ISNULL(ParentId,'') 'ParentId' 
FROM Patients 

ParenId是uniqueidentifier,允許NULL,但目前看來,查詢優化器嘗試也轉換''uniqueidentifier對於其中ParentId = NULL。正如標題所說這是確切的錯誤信息查詢亞軍拋出我的臉行!

  • 我如何獲得服務器返回空字符串ParentId = NULL

回答

53
SELECT Id 'PatientId', 
     ISNULL(CONVERT(varchar(50),ParentId),'') 'ParentId' 
FROM Patients 

ISNULL總是試圖返回具有相同數據類型作爲第一個參數的類型的結果。所以,如果你希望結果是一個字符串(varchar),你最好確保這是第一個參數的類型。


COALESCE通常是更好的功能比ISNULL使用,因爲它認爲所有參數的數據類型和施加適當的precedence規則以確定最終產生的數據類型。不幸的是,在這種情況下,uniqueidentifier具有比varchar更高的優先級,所以這沒有幫助。

(它也通常是優選的,因爲其延伸至兩個以上的參數)

+0

謝謝你給超過通緝。我從你的答案中學到了很多東西,將它標記爲4分鐘內回答Greetz – Deeptechtons 2012-03-29 10:29:07

+0

@Damien_The_Unbeliever我試着'COALESCE(CONVERT(varchar(50),ParentId),'')'和'ISSNULL(CONVERT(varchar(50), ParentId),'')',我仍然得到一個零而不是一個空單元格。我的ParentId是smallint。 – bteague 2017-08-23 16:04:22

+0

也試過ISNULL(CAST(ParentId as VARCHAR(50)),'')和COALESCE(CAST(ParentId as VARCHAR(50)),'') – bteague 2017-08-23 16:08:34

5

您需要CASTParentIdnvarchar,使輸出始終是相同的數據類型。

SELECT Id 'PatientId', 
     ISNULL(CAST(ParentId as nvarchar(100)),'') 'ParentId' 
FROM Patients 
8
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients 

這是必要的,因爲場PARENTID不是VARCHAR/nvarchar的類型。這將做的伎倆:

Select ID, IsNull(ParentID,'') from Patients 
相關問題