奇怪的 CASE WHEN 案例

Strange CASE WHEN case

微软 SQL 服务器 2008 R2 (RTM) - 10.50.1600.1 (X64) 2010 年 4 月 2 日 15:48:46 版权所有 (c) 微软公司 Windows NT 6.2(内部版本 9200:)(管理程序)上的标准版(64 位)

SQL_Latin1_General_CP1_CI_AS

字段:名字、出生日期(日期时间)

DOB Properties

Table:

FARHAN                     1900-01-01 00:00:00.000
DAWOOD                     2004-04-22 00:00:00.000

第一次查询:

SELECT FIRSTNAME, CASE WHEN CONVERT(DATE, [DOB]) = CONVERT(DATE, '1900-01-01') 
THEN '' ELSE CONVERT(DATE, [DOB]) END AS 'DOB' 

结果:

FARHAN                     1900-01-01
DAWOOD                     2004-04-22

第二次查询:

SELECT FIRSTNAME, CASE WHEN CONVERT(DATE, [DOB]) = CONVERT(DATE, '1900-01-01') 
THEN '' ELSE CONVERT (VARCHAR, CONVERT(DATE, [DOB])) END AS 'DOB' 

结果:

FARHAN           
DAWOOD                     2004-04-22

有人请问,第一个查询是否处理了 ELSE 部分?为什么会有这种差异?

Could someone please, did the first query process the ELSE part? Why this difference?

不,第一个查询不处理 ELSE,它只是显示你 '' 转换为 date

因为你使用了case并且case表达式的结果是一种确定类型。但是你在同一个case中使用了char类型('')和date类型,所以其中一种类型应该转换为其他类型,在你的情况下char根据Data Type Precedence

转换为date