首页 > 解决方案 > 仅执行 ELSE 语句的情况

问题描述

我以前从未见过这种情况,但是当我在 SQL Server 中执行语句时,它会执行该SELECT语句。这怎么可能?是因为它不能在同一列中处理不同类型的值类型吗?CASE WHENELSE

SELECT CASE WHEN len(birthDate)=4 THEN birthDate
            WHEN birthDate = '' THEN ''
            ELSE CONVERT(datetime, birthDate)
       END AS [birthDateConverted]
       ,[birthDate]
FROM BirthDayTable

结果如下所示:

birthDateConverted          birthDate
1951-01-01 00:00:00.000     1951
1936-06-19 00:00:00.000     June 19, 1936
1948-03-11 00:00:00.000     March 11, 1948
NULL                        

我想要以下内容:

birthDateConverted          birthDate
1951                        1951
1936-06-19                  June 19, 1936
1948-03-11                  March 11, 1948
NULL    

而且我也不明白为什么当我指定''时我得到NULL。但这部分不如第一部分重要,因为我希望只有指定年份的年份。

标签: sql-server

解决方案


NULL不等于 '' 所以,你可以这样做:

SELECT (CASE WHEN len(birthDate) = 4 
             THEN birthDate
             WHEN birthDate IS NULL 
             THEN ''
             ELSE CONVERT(datetime, birthDate)
       END) AS [birthDateConverted],
       [birthDate]
FROM BirthDayTable;

但是,''将隐式转换为日期时间。


推荐阅读