奇怪的 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
微软 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