2016-08-17 143 views
0

我正在使用以'PTxxMxxS'格式存储时间周期/持续时间的MySQL数据库。从MySQL数据库转换周期/持续时间格式

我想转换为标准时间格式,所以例如我想将PT4M17S转换为04:17。

我尝试过STR_TO_DATE和TIME_FORMAT的各种组合,但没有任何成功。

我已经搜索,但我找不到解决方案 - 我认为问题的一部分是,我不知道这种类型的时间格式被称为。

谢谢。

+1

mysql日期/时间字段是针对实际日期/时间的。你正在存储间隔/持续时间,它不会干净地映射到日期/时间。例如'PT999H'是一个有效的时间间隔,但是如果你将它填充到mysql时间字段中,它会被破坏,因为mysql时间大约是+/- 838小时。任意的时间间隔应该可以转换成其他的东西,比如表示秒的原始整数。那些可以很容易地转换回间隔格式与一些代码,但你不能转换/使用损坏的时间值。 –

+0

对于有效的时间段,您可以使用str_to_date()函数将上述格式转换为MySQL的时间格式。你究竟试过了什么? – Shadow

+0

这是一个我不得不从数据库中获取数据的数据库,因此我无法控制其内容 - 时间格式PTxxMxxS只是我必须处理的事情。我尝试过使用STR_TO_DATE(fieldvalue,'%h:%i:%s)并且与TIME_FORMAT类似 – jhTuppeny

回答

0

str_to_date()功能MySQL文档说:

服务器扫描STR试图匹配格式它。

以上表示格式参数用于解析输入字符串,而不是格式化结果的输出。这就是您的转换失败的原因。

下面的调用会将'PTxxMxxS'格式的时间转换为标准的mysql时间格式(不需要指定格式参数中的最后一个S字符,但是可以添加它,如果需要的话,无所谓)。

STR_TO_DATE(fieldvalue, 'PT%iM%s') 

然而,正如@MarcB已指出,MySQL的time data type有其范围限制,因此使用STR_TO_DATE()函数可能不足以为你一个简单的转换。在应用转换之前检查您的数据。

+0

感谢您的回答和所有评论 - 非常感谢。 STR_TO_DATE和TIME_FORMAT的组合工作。 – jhTuppeny