gpt4 book ai didi

SQL CASE错误输出

转载 作者:行者123 更新时间:2023-12-02 09:28:13 25 4
gpt4 key购买 nike

我在 sql 2014 中使用 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'

这是输出:

enter image description here

如果您可能会问,这里是 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

问题:
为什么我的输出中的 Column Age 是 0 而应该是 ''
我添加了 (无列名称) 以显示其输出为 0,因此我的情况条件的预期输出基础是 '' 而不是 >0我没有收到任何有关数据不一致的错误,那么为什么情况会这样呢?

感谢那些能够向我澄清这一点的人。

最佳答案

SELECT
(CASE
WHEN a.ageint = 0 THEN ''
ELSE cast(a.ageint as varchar(3))
END) AS Age
, a.ageint
, c.Birthdate
FROM Client as C
CROSS APPLY (
SELECT
ISNULL(dbo.GetFunctionAge(C.Birthdate), 0) AS ageint
) AS a
WHERE ClientID = '34d0d845-e3a6-4078-8936-953ff3378eac'
;

关于SQL CASE错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com