我正在尝试使用标准SQL在Big-Query中运行查询。
我的表格中有一列,其中时间以以下格式显示: 170519
我想做的是在每两个数字后添加冒号(:),以获得如下结果: 17:05:19
我该怎么做?
我一直在搜索,但未能找到解决方案。也许我搜索的单词不正确?
感谢您的帮助!
编辑:
所以@Gordon Linoff的答案只适用于一列。
现在合并两列时如何使用?
这是我的代码,其中出现语法错误:
SELECT
CONCAT(FORMAT_DATE("%Y-%m-%d", PARSE_DATE('%d%m%Y',
Date1)), ' ',(PARSE_TIME("%H%M%S",
Time1)) AS Date_Time
FROM
答案 0 :(得分:2)
以下是您可以尝试的示例(将其复制并粘贴到https://console.cloud.google.com/bigquery中的编辑器中):
CREATE TEMP FUNCTION InsertColons(s STRING) AS (
CONCAT(SUBSTR(s, 1, 2), ':', SUBSTR(s, 3, 2), ':', SUBSTR(s, 5, 2))
);
SELECT s, InsertColons(s) AS result
FROM (
SELECT '123456' AS s UNION ALL
SELECT '170519'
);
SUBSTR
函数选择字符串的一部分,例如使用序号CONCAT
合并各部分之前,前两个字符在序数1,然后前两个字符在序数3,然后在序数5。
答案 1 :(得分:1)
您可以执行以下操作:
SELECT LEFT(c, 2) + ':' + SUBSTRING(c, 3, 2) + ':' + SUBSTRING(c, 5, 2)
FROM
-- Use your own table in the FROM statement instead of this fake one
(SELECT '170519' as c ) as q1
返回17:05:19
或带有您的数据:
SELECT LEFT(timo, 2) + ':' + SUBSTRING(timo, 3, 2) + ':' + SUBSTRING(timo, 5, 2)
FROM
table1
答案 2 :(得分:1)
我将其转换为time
数据类型而不是字符串:
select parse_time('%H%M%S', '170519')
如果以数字开头:
select parse_time('%H%M%S', cast(170519 as string))
如果要将其格式化为字符串,则可以格式化时间。例如,以下内容会将其设置为HH:MM格式:
select format_time('%H:%M', parse_time('%H%M%S', cast(170519 as string)))
我喜欢以正确的类型存储东西。
答案 3 :(得分:0)
以下BigQuery标准SQL示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT '09052019' date1, '170519' time1 UNION ALL
SELECT '10052019', '091020'
)
SELECT PARSE_DATETIME('%d%m%Y%H%M%S', CONCAT(date1, time1)) date_time,
CAST(PARSE_DATETIME('%d%m%Y%H%M%S', CONCAT(date1, time1)) AS STRING) date_time_as_string
FROM `project.dataset.table`
有结果
Row date_time date_time_as_string
1 2019-05-09T17:05:19 2019-05-09 17:05:19
2 2019-05-10T09:10:20 2019-05-10 09:10:20
答案 4 :(得分:0)
SELECT CONCAT(SUBSTRING('170519', 1, 2), ':', SUBSTRING('170519',3, 2), ':', SUBSTRING('170519',5, 2))
这会给您适当的答案,例如17:05:19