我有一个时间值作为varchar(4)存储在数据库中,我需要将其转换为实时。
例如,如果时间是“23:59”,我想要在晚上11:59返回。
问题是小时和分钟之间没有“:”。所以当我运行这个查询时
SELECT TIME_FORMAT('2359', '%h:%i'); -- 12:23, wtf??
但是如果我跑了这个:
SELECT TIME_FORMAT('23:59', '%h:%i'); -- returns 11:59 as expected.
所以,总结一下: 1.时间存储为数据库中的varchar(4)。示例:
1200, 1201, 0153, 1364, 1923
我的大脑受伤了,这比我意识到的要容易得多......
像这样,但对于mysql Convert varchar into datetime in SQL Server mysql 12 hr to 24 hr time conversion答案 0 :(得分:1)
这个查询怎么样?
SELECT TIME_FORMAT(STR_TO_DATE('2359', '%H%i'), '%h:%i %p');
结果如下:
+------------------------------------------------------+ | TIME_FORMAT(STR_TO_DATE('2359', '%H%i'), '%h:%i %p') | +------------------------------------------------------+ | 11:59 PM | +------------------------------------------------------+
答案 1 :(得分:1)
如果包含秒数,它看起来像预期的那样:
mysql> SELECT TIME_FORMAT(235900, '%h %i %s'); +---------------------------------+ | TIME_FORMAT(235900, '%h %i %s') | +---------------------------------+ | 0000 00 00 11 59 00 | +---------------------------------+ 1 row in set (0.00 sec)
我甚至删除了引号 - 它可以使用整数。
为了确认它正在做正确的事情:
mysql> SELECT TIME_FORMAT(235901, '%h %i %s'); +---------------------------------+ | TIME_FORMAT(235901, '%h %i %s') | +---------------------------------+ | 11 59 01 | +---------------------------------+ 1 row in set (0.00 sec)
我尝试了几种组合,如235960 236059 235999,它们都返回NULL。
答案 2 :(得分:1)
没关系,这很好用:
TIME_FORMAT(CONCAT(SUBSTRING(THE_TIME, 1,2), ':', SUBSTRING(THE_TIME, 3,4)), '%h%i')
答案 3 :(得分:1)
使用名为test
的表格,其中包含名为string
且值为
2300
2100
1200
0430
0430
使用查询
select concat(time_format(concat(substring(string,-4,2),':',substring(string,3)),'%h:%i'),
case when string >= 1200 then ' PM' else ' AM' end)
from test;
你明白了,
11:00 PM
09:00 PM
12:00 PM
04:30 AM
04:30 AM
答案 4 :(得分:0)
这是一个快速的黑客攻击,但由于你错过了4位数之间的“:”,所以如何插入缺少的冒号。
SELECT TIME_FORMAT( CONCAT( SUBSTRING('2359', 0, 2), ':',
SUBSTRING('2359', 3, 2)), '%h:%i');
当然,请将2359替换为时间列名称。