如何在案例的ELSE内查询?

时间:2012-09-13 05:05:31

标签: mysql case

我当前的查询在CASE WHEN:

之外正常工作
select *, timestampdiff(DAY, from_unixtime(laststaffreplytime, '%Y-%m-%d'), 
curdate()) from swtickets;

但是,当它放在CASE WHEN的ELSE中时,该列会产生所有空值:

SELECT *, CASE laststaffreplytime
WHEN 0 THEN 'No Response' 
ELSE (timestampdiff(DAY, from_unixtime(laststaffreplytime, '%Y-%m-%d'), 
curdate())) END as LastContact from swtickets;

关于为什么此查询仅返回空值的任何想法?

2 个答案:

答案 0 :(得分:1)

CASE运算符必须能够返回单个数据类型 - 您的样本在一种情况下返回一个字符串,在另一种情况下返回一个整数。我不认为应该将结果转换为NULL - 我希望在这种情况下整数会表示为字符串 - 但是MySQL可以做任何事情:)

尝试将“无响应”更改为固定的整数值,例如-1,以查看是否会更改结果。

从手册:

  

CASE表达式的返回类型是所有返回值的兼容聚合类型,但也取决于使用它的上下文。如果在字符串上下文中使用,则结果将作为字符串返回。如果在数字上下文中使用,则结果将返回为十进制,实数或整数值。

答案 1 :(得分:0)

SELECT *, CASE laststaffreplytime
WHEN '0' THEN 'No Response' 
ELSE (timestampdiff(DAY, from_unixtime(laststaffreplytime, '%Y-%m-%d'), 
curdate())) END as LastContact from swtickets;