0

私の現在のクエリは、CASE WHEN 以外では問題なく動作します。

select *, timestampdiff(DAY, from_unixtime(laststaffreplytime, '%Y-%m-%d'), 
curdate()) from swtickets;

ただし、これを CASE WHEN の ELSE に配置すると、列はすべて NULL 値を生成します。

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

このクエリが null 値のみを返す理由についてのアイデアはありますか?

4

2 に答える 2

1

CASE 演算子は、単一のデータ型を返すことができる必要があります。サンプルは、あるケースでは文字列を返し、別のケースでは整数を返します。結果をNULLに変えるべきではないと思います-その場合、整数は文字列として表されると思います-しかし、MySQLでは何でも可能です:)

「応答なし」を -1 などの固定整数値に変更して、結果が変わるかどうかを確認してください。

マニュアルから:

CASE 式の戻り値の型は、すべての戻り値の互換性のある集約型ですが、それが使用されるコンテキストにも依存します。文字列コンテキストで使用すると、結果は文字列として返されます。数値コンテキストで使用すると、結果は 10 進数、実数、または整数値として返されます。

于 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 に答える