SQL Server案例查询不工作
我知道这听起来可能很小,但需要解决,下面是我的SQL查询SQL Server案例查询不工作,sql,sql-server,Sql,Sql Server,我知道这听起来可能很小,但需要解决,下面是我的SQL查询 SELECT CASE WHEN A.ReleaseDate = '1900-01-01' THEN '' WHEN A.ReleaseDate IS NULL THEN '' ELSE ReleaseDate END AS ReleaseDate FROM XYZ 我可以在我的表中看到Releasedate是1900-01-01,但case仍然使用ELSE条件。我找
SELECT
CASE
WHEN A.ReleaseDate = '1900-01-01' THEN ''
WHEN A.ReleaseDate IS NULL THEN ''
ELSE ReleaseDate
END AS ReleaseDate
FROM XYZ
我可以在我的表中看到
Releasedate
是1900-01-01
,但case仍然使用ELSE
条件。我找不出原因。一个case
表达式返回一个类型。我想你的会回来的。因此,您会得到一个日期,一个空白字符串会变成一个非常旧的日期
如果希望它返回一个空白字符串,则需要返回一个字符串。因此,请使用显式转换:
SELECT (CASE WHEN A.ReleaseDate = '1900-01-01' THEN ''
WHEN A.ReleaseDate is null THEN ''
ELSE CONVERT(VARCHAR(10), ReleaseDate, 121)
END) as ReleaseDate
FROM XYZ;
case
表达式返回单个类型。我想你的会回来的。因此,您会得到一个日期,一个空白字符串会变成一个非常旧的日期
如果希望它返回一个空白字符串,则需要返回一个字符串。因此,请使用显式转换:
SELECT (CASE WHEN A.ReleaseDate = '1900-01-01' THEN ''
WHEN A.ReleaseDate is null THEN ''
ELSE CONVERT(VARCHAR(10), ReleaseDate, 121)
END) as ReleaseDate
FROM XYZ;
您可以将ReleaseDate转换为Varchar
SELECT (CASE WHEN ReleaseDate = '1900-01-01' THEN ''
WHEN ReleaseDate is null THEN ''
ELSE cast(ReleaseDate as varchar)
END) as ReleaseDate
FROM XYZ;
您可以将ReleaseDate转换为Varchar
SELECT (CASE WHEN ReleaseDate = '1900-01-01' THEN ''
WHEN ReleaseDate is null THEN ''
ELSE cast(ReleaseDate as varchar)
END) as ReleaseDate
FROM XYZ;
输出的字段应一致。i、 e.在一种情况下,您返回的是“”(即varchar),而在另一种情况下,您返回的是日期,这是不确定的。这就像一个函数在每个条件下返回不同的类型。ReleaseDate字段是什么数据类型?问题是还没有人问这个问题。如果您的ReleaseDate字段是一个datetime,并且没有在该字段中添加时间部分,则会怎样?对任何人的说法都没有争议,只是ReleaseDate字段的数据类型实际上还没有被确认。输出的字段应该是一致的。i、 e.在一种情况下,您返回的是“”(即varchar),而在另一种情况下,您返回的是日期,这是不确定的。这就像一个函数在每个条件下返回不同的类型。ReleaseDate字段是什么数据类型?问题是还没有人问这个问题。如果您的ReleaseDate字段是一个datetime,并且没有在该字段中添加时间部分,则会怎样?不反驳任何人说的话,只是ReleaseDate字段的数据类型实际上还没有被确认。这与Gordon的答案相同,只是您有没有定义大小的varchar。这与Gordon的答案相同,只是您有一个没有定义大小的varchar。