Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server案例查询不工作_Sql_Sql Server - Fatal编程技术网

SQL Server案例查询不工作

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条件。我找

我知道这听起来可能很小,但需要解决,下面是我的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
条件。我找不出原因。

一个
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。