MySql - TIME()函数在CASE语句中不起作用

时间:2016-04-06 16:01:41

标签: mysql

我正在尝试在case语句中使用TIME()函数,如下所示:

SELECT CASE WHEN DATE(datetime_column) = CURDATE() THEN TIME(datetime_column) ELSE datetime_column END as datetime_column
FROM my_table;

但是当案例评估= CURDATE()时,我得到'0000-00-00 00:00:00'。

如果我试试这个:

SELECT CASE WHEN '2016-04-06' = CURDATE() THEN TIME('2016-04-06 07:28:04') ELSE '2016-04-06 07:28:04' END as datetime_column;

我要07:28:04

另外,如果我使用DATE_FORMAT()尝试相同的查询,如下所示:

SELECT CASE WHEN DATE(datetime_column) = CURDATE() THEN DATE_FORMAT(datetime_column, '%H:%i:%s') ELSE datetime_column END as datetime_column FROM my_table;

我也有时间。

有什么想法吗?

数据示例:

CREATE TABLE `my_table` (
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `inserted_date` datetime NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


INSERT INTO `my_table` VALUES ('five','2016-04-06 12:37:07')
,('four','2016-04-06 12:36:16')
,('one','2016-04-06 12:30:37')
,('three','2016-04-06 12:32:05')
,('two','2016-04-06 12:31:32');

1 个答案:

答案 0 :(得分:0)

您应该使用CAST()将值转换为字符串,以便CASE的输出是一致的数据类型。

这应该有效:

SELECT (CASE 
  WHEN DATE(datetime_column) = CURDATE() THEN CAST(TIME(datetime_column) AS CHAR) 
  ELSE CAST(datetime_column AS CHAR)
  END) as datetime_column
FROM my_table;