案例奇怪的情况

时间:2018-01-18 07:41:58

标签: sql sql-server sql-server-2008-r2

Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)     2010年4月2日15:48:46     版权所有(c)Microsoft Corporation     Windows NT 6.2(Build 9200:)(管理程序)

上的标准版(64位)

SQL_Latin1_General_CP1_CI_AS

字段:FIRSTNAME,DOB(日期时间)

DOB Properties

表:

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部分吗?为什么会出现这种差异?

1 个答案:

答案 0 :(得分:0)

  

有人可以,第一次查询处理ELSE部分吗?为什么   这个差异?

不,第一个查询不处理ELSE,它只显示''已投放到date

由于您使用case并且case表达式的结果是一个明确的类型。但您在同一char中使用''类型(date)和case类型,因此其中一种类型应转换为其他类型,在您的情况下{{1} }根据Data Type Precedence

转换为char