MySQL TIME类型数据格式问题:如何仅获取时分秒部分
解决MySQL TIME字段查询返回带日期和时区的问题
这个问题我之前也碰到过,本质是Ruby的数据库驱动(比如mysql2)会把MySQL的TIME类型自动转换为完整的Time对象——而Time对象必须包含日期部分,所以默认补了2000-01-01,再加上时区信息就成了你看到的格式。下面给你两种实用的解决思路:
方法一:在SQL查询中直接格式化(推荐)
直接在查询语句里用MySQL的DATE_FORMAT函数把TIME字段转成你想要的字符串格式,这样返回结果里直接就是纯时间部分,不用在Ruby里额外处理:
result = connect.query("SELECT DATE_FORMAT(sourcetime, '%H:%i:%s') AS sourcetime, description FROM data WHERE event_type = 'ALARM_OPENED' AND severity = '2'") equipments = result.map { |print_this| [print_this['sourcetime'], print_this['description']] } p equipments
这里的%H:%i:%s对应24小时制小时、分钟、秒,刚好输出12:00:04这种格式。
方法二:在Ruby代码中格式化Time对象
如果不想修改SQL语句,也可以在Ruby里对返回的Time对象调用strftime方法,提取纯时间部分:
result = connect.query("SELECT * FROM data WHERE event_type = 'ALARM_OPENED' AND severity = '2'") equipments = result.map do |print_this| formatted_time = print_this['sourcetime'].strftime('%H:%M:%S') [formatted_time, print_this['description']] end p equipments
strftime('%H:%M:%S')会把Time对象格式化为仅包含时分秒的字符串,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Joshua Ng
相关产品推荐
相关产品推荐

