在我的数据集中,我有一个变量< code>duration,其中有200万行< code>ISO 8601格式的数据。示例格式:< code>PT21S或< code>PT5M29S,< code>PT1M16S
我在将此字符串变量转换为时间时遇到问题。目前我正在使用查询:
REGEXP_EXTRACT(duration, r'[^\d]+') as time,
通过该查询,可以区分持续时间是小时、分钟还是秒。我想将字符串持续时间转换为时间。我用过Regex和cast,但没有成功。当我尝试将字符串转换为时间时,我得到了错误:
“无效时间戳:'15S'”
"无效的时间戳:'1M'
“错误的 int64 值: PT11M16S”
我遇到的最大问题是字符串永远不会相同。
更多字符串示例:
PT48S
PT43M40S
PT7M54S
PT3M14S
PT4H17M16S
PT3M46S
PT3H18M35S
PT3H8M45S
更新:我试过了
WITH data AS (
SELECT (duration) as time_str FROM x
)
SELECT
CASE
WHEN time_str LIKE 'PT%H%M%S' THEN PARSE_TIME('PT%HH%MM%SS', time_str)
WHEN time_str LIKE 'PT%M%S' THEN PARSE_TIME('PT%MM%SS', time_str)
WHEN time_str LIKE 'PT%S' THEN PARSE_TIME('PT%SS', time_str)
ELSE NULL
END
FROM data
我得到错误:
格式字符“S”和字符串字符“H”之间不匹配
也许像这样的事情可以:
WITH data AS (
SELECT * FROM UNNEST(['PT48S', 'PT43M40S', 'PT7M54S', 'PT3M14S', 'PT4H17M16S', 'PT3M46S', 'PT3H18M35S', 'PT3H8M45S']) as time_str
)
SELECT
CASE
WHEN time_str LIKE 'PT%H%M%S' THEN PARSE_TIME('PT%HH%MM%SS', time_str)
WHEN time_str LIKE 'PT%M%S' THEN PARSE_TIME('PT%MM%SS', time_str)
WHEN time_str LIKE 'PT%S' THEN PARSE_TIME('PT%SS', time_str)
ELSE NULL
END
FROM data
下面考虑
select time_str,
( select parse_time('%H:%M:%S', string_agg(ifnull(lpad(val, 2, '0'), '00'), ':' order by offset))
from unnest([
regexp_extract(time_str, r'(\d+)H'),
regexp_extract(time_str, r'(\d+)M'),
regexp_extract(time_str, r'(\d+)S')
]) val with offset) time_time
from data
如果应用于问题中的示例数据-输出是
问题内容: 我有一个来自json响应的字符串: 如何将此字符串转换为Java DateTime对象? 我尝试使用以下内容: 但与此我只能创建一个日期对象。但是绑定在字符串中的时间还是很重要的。 任何帮助是极大的赞赏! 问题答案: 您可以从Java Date对象创建Joda DateTime对象,因为Java没有类。 尽管Java类也保存时间信息(这是您首先需要的信息),但我还是建议您使用a 代替J
我有以下字符串格式的时间戳 如何将上面的时间戳字符串解析为?
我有一个本地日期时间的字符串表示和一个Java时区。 我正在尝试以 MM/dd/yyyy HH:mm:ssZ 格式获取输出,但我无法弄清楚如何使用正确的日期时间和时区创建日历或 JodaTime 对象。如何将时区转换为可以通过简单日期格式“Z”或“z”解析的值? 和 返回 这是 。 是创建日历或Joda日期时间并通过解析字符串“08/14/2014 15:00:00”来设置各个年/月/日/小时/分
问题内容: 有什么方法可以在MySQL中将字符串转换为UNIX时间戳? 例如,我有一个字符串,需要使用unix时间戳格式。 问题答案: 绝招: 但是,该函数仅采用标准的MySQL格式化日期。如果要使用AM / PM表示法,则需要先使用如下代码:
问题内容: 这是我的问题:我有一个用户输入日期,例如:2012-12-24(字符串)我将一个时间连接到该字符串,然后转换为java.util.Date我的代码如下: 我的问题是,当我使用该util.Date并将其设置为sql.Date时: 它不会给我分配的时间戳,只会以yyyy-MM-dd格式返回日期(例如2012-12-23)。 为什么!?我好沮丧 注意:我注意到当我使用断点时,我能够展开sql
问题内容: 我想将持续时间(即秒数)转换为以冒号分隔的时间字符串(hh:mm:ss) 我在这里找到了一些有用的答案,但他们都谈论转换为x小时和x分钟格式。 那么,有没有一个小片段在jQuery或原始JavaScript中做到这一点? 问题答案: 您现在可以像这样使用它: 工作片段: