我正在使用Google大查询,并且我有一个与HMMSS一样为整数的字段TIME。我需要提取某些数字来创建3列:TIME_SECOND,TIME_MINUTE,TIME_HOUR。
“时间”列和必需的整数列的示例:
TIME TIME_HOUR TIME_MINUTE TIME_SECOND
---------- --------- --------- ----------
2 | 00 | 00 | 02
10 | 00 | 00 | 10
111 | 00 | 01 | 11
1858 | 00 | 18 | 58
12316 | 01 | 23 | 16
234559 | 23 | 45 | 59
理想地,它需要尽可能高效,因为此计算将在大型表上进行。
谢谢!
答案 0 :(得分:1)
以下是BigQuery标准SQL
#standardSQL
SELECT
time,
CAST(time / 10000 AS INT64) AS time_hour,
MOD(CAST(FLOOR(time / 100) AS INT64), 100) AS time_minute,
MOD(time, 100 ) AS time_second
FROM `project.dataset.table`
如果要应用于您的问题的样本数据-输出为
Row time time_hour time_minute time_second
1 2 0 0 2
2 10 0 0 10
3 111 0 1 11
4 1858 0 18 58
5 12316 1 23 16
6 234559 23 45 59
上面产生整数-同时,在示例输出中,它看起来像您可能期望的字符串:({00
,01
等)-如果是这样-在下面使用
#standardSQL
SELECT
time,
y[OFFSET(1)] AS time_hour,
y[OFFSET(2)] AS time_minute,
y[OFFSET(3)] AS time_second
FROM `project.dataset.table`,
UNNEST([CAST(10000000 + time AS STRING)]) x,
UNNEST([STRUCT(REGEXP_EXTRACT_ALL(x, r'\d\d') AS y)])
有输出
Row time time_hour time_minute time_second
1 2 00 00 02
2 10 00 00 10
3 111 00 01 11
4 1858 00 18 58
5 12316 01 23 16
6 234559 23 45 59
答案 1 :(得分:-1)
您可以使用算术:
select (time / 10000) as time_hour,
(floor(time / 100) % 100) as time_minute,
(time % 100 )as time_second