我正在尝试在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');
答案 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;