你意想不到的输出
最近在做存储过程开发的时候,遇到一个问题,我相信90%的人第一次都会出错,比如对于下面的例子:
declare @type int
set @type = 1
select
case
when @type = 1 then '-'
else 0
end
我最初的意图是,当@type的值为1的时候,就输出一个dash符号‘-’,而当@type为其他值的时候,就直接输出0.
我相信,到这里,90%以上的人认为以上查询的输出结果为'-'. 但是当你运行以上查询的时候,你会惊奇的发现结果不是dash,哈哈。
正确答案是0. Oh my god, 为什么会是0, 难道SQL Server的case语句有严重的bug?我不敢相信。
后来才发现,是因为数据类型的原因。int类型的优先级比varchar类型高,所以当@type = 1的时候,dash符号被看成了负号,进而被转换成了0. 要想得到正确的结果,把int类型改成varchar类型就OK了,如下:
declare @type int
set @type = 1
select
case
when @type = 1 then '-'
else ‘0’
end
我又学了一招。。。。。
浙公网安备 33010602011771号