0

我当前的查询在 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;

关于为什么这个查询只返回空值的任何想法?

4

2 回答 2

1

CASE 运算符必须能够返回单一数据类型——您的示例在一种情况下返回字符串,在另一种情况下返回整数。我认为这不应该将结果转换为 NULL——我希望在这种情况下整数将表示为字符串——但 MySQL 一切皆有可能:)

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

从手册:

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

于 2012-09-13T05:35:06.057 回答
0
SELECT *, CASE laststaffreplytime
WHEN '0' THEN 'No Response' 
ELSE (timestampdiff(DAY, from_unixtime(laststaffreplytime, '%Y-%m-%d'), 
curdate())) END as LastContact from swtickets;
于 2012-09-13T05:21:14.037 回答