将字符串转换为时间 sql 或雪花

Convert string to time sql or snowflake

如何使用 SQL 将 'PT5H19M' 转换为 time 格式?我用在 MySQL STR_TO_DATE('PT5H19M', 'PT%HH%iM')

这是由于 SQL 模式 NO_ZERO_DATE 被启用(在 MySQL 5.7 及更高版本中默认启用)。如果您可以控制 SQL 模式,您可以通过取消设置 NO_ZERO_DATE 来解决它,例如

SET @@SQL_MODE = REPLACE(@@SQL_MODE, 'NO_ZERO_DATE', '')
SELECT STR_TO_DATE('PT5H19M', 'PT%HH%iM')

输出:

05:19:00

如果您不能(或不想)设置 SQL 模式,作为解决方法,您可以 CONCAT 一个有效日期到您的字符串,然后使用 TIME 获取输出的时间部分,例如

SELECT TIME(STR_TO_DATE(CONCAT('2001-01-01','PT5H19M'), '%Y-%m-%dPT%HH%iM'))

输出:

05:19:00

Demo on dbfiddle

为了雪花

select to_time('PT5H19M', '"PT"HH24"H"MI"M"');
----------------------------------------+
 TO_TIME('PT5H19M', '"PT"HH24"H"MI"M"') |
----------------------------------------+
 05:19:00                               |
----------------------------------------+