我在SQL中使用CASE這個奇怪的遭遇2014年SQL CASE錯誤輸出
這是我的查詢:
SELECT (CASE WHEN dbo.GetFunctionAge(C.Birthdate) = 0
THEN '' ELSE dbo.GetFunctionAge(C.Birthdate)
END) AS Age
,dbo.GetFunctionAge(C.Birthdate)
,c.Birthdate
FROM Client C
WHERE ClientID = '34d0d845-e3a6-4078-8936-953ff3378eac'
這是輸出:
這裏GetFunctionAge函數,如果你可能會問。
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE ID = OBJECT_ID(N'[dbo].[GetFunctionAge]') AND
xtype in (N'FN', N'IF', N'TF'))
DROP FUNCTION [dbo].[GetFunctionAge]
GO
CREATE FUNCTION [dbo].[GetFunctionAge](@BirthDate DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @Age INT
IF(@BirthDate = '1753-01-01 00:00:00.000')
BEGIN
SET @Age = 0
END
ELSE
BEGIN
SET @Age = DATEDIFF(hour,@BirthDate,GETDATE())/8766
END
RETURN @Age
END
GO
問:
爲什麼在我的輸出列年齡是0
這應該是''
?
我加(No column name)
表明其輸出0
所以從我的情況下,我的病情預期輸出基地爲''
不0
我沒有收到有關數據,所以爲什麼行爲的情況下這樣的不一致的錯誤?
感謝那些能夠向我澄清這一點的人。
爲什麼 '1753年1月1日00:00:00.000'?改爲使用NULL。 – jarlh
如果你用'-1'代替'''會發生什麼? –
您正在從@Age的dbo.GetFunctionAge(C.Birthdate)返回一個Int值。因此,當您在case語句中使用它時,它也會返回一個int值。 ''變爲0. – Kim