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(日期时间)
表:
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部分吗?为什么会出现这种差异?
答案 0 :(得分:0)
有人可以,第一次查询处理ELSE部分吗?为什么 这个差异?
不,第一个查询不处理ELSE,它只显示''
已投放到date
。
由于您使用case
并且case表达式的结果是一个明确的类型。但您在同一char
中使用''
类型(date
)和case
类型,因此其中一种类型应转换为其他类型,在您的情况下{{1} }根据Data Type Precedence
char