我当前的查询在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;
关于为什么此查询仅返回空值的任何想法?
答案 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;