我正在使用以'PTxxMxxS'格式存储时间周期/持续时间的MySQL数据库。从MySQL数据库转换周期/持续时间格式
我想转换为标准时间格式,所以例如我想将PT4M17S转换为04:17。
我尝试过STR_TO_DATE和TIME_FORMAT的各种组合,但没有任何成功。
我已经搜索,但我找不到解决方案 - 我认为问题的一部分是,我不知道这种类型的时间格式被称为。
谢谢。
我正在使用以'PTxxMxxS'格式存储时间周期/持续时间的MySQL数据库。从MySQL数据库转换周期/持续时间格式
我想转换为标准时间格式,所以例如我想将PT4M17S转换为04:17。
我尝试过STR_TO_DATE和TIME_FORMAT的各种组合,但没有任何成功。
我已经搜索,但我找不到解决方案 - 我认为问题的一部分是,我不知道这种类型的时间格式被称为。
谢谢。
上str_to_date()功能MySQL文档说:
服务器扫描STR试图匹配格式它。
以上表示格式参数用于解析输入字符串,而不是格式化结果的输出。这就是您的转换失败的原因。
下面的调用会将'PTxxMxxS'格式的时间转换为标准的mysql时间格式(不需要指定格式参数中的最后一个S字符,但是可以添加它,如果需要的话,无所谓)。
STR_TO_DATE(fieldvalue, 'PT%iM%s')
然而,正如@MarcB已指出,MySQL的time data type有其范围限制,因此使用STR_TO_DATE()函数可能不足以为你一个简单的转换。在应用转换之前检查您的数据。
感谢您的回答和所有评论 - 非常感谢。 STR_TO_DATE和TIME_FORMAT的组合工作。 – jhTuppeny
mysql日期/时间字段是针对实际日期/时间的。你正在存储间隔/持续时间,它不会干净地映射到日期/时间。例如'PT999H'是一个有效的时间间隔,但是如果你将它填充到mysql时间字段中,它会被破坏,因为mysql时间大约是+/- 838小时。任意的时间间隔应该可以转换成其他的东西,比如表示秒的原始整数。那些可以很容易地转换回间隔格式与一些代码,但你不能转换/使用损坏的时间值。 –
对于有效的时间段,您可以使用str_to_date()函数将上述格式转换为MySQL的时间格式。你究竟试过了什么? – Shadow
这是一个我不得不从数据库中获取数据的数据库,因此我无法控制其内容 - 时间格式PTxxMxxS只是我必须处理的事情。我尝试过使用STR_TO_DATE(fieldvalue,'%h:%i:%s)并且与TIME_FORMAT类似 – jhTuppeny