使用标准 SQL 在两个数字后添加冒号
Adding colon after two numbers using Standard SQL
我正在尝试 运行 使用标准 SQL 在 Big-Query 中进行查询。
我的 table 中有一个专栏,时间以这种格式显示: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
你可以这样做:
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
Returns 17:05:19
或使用您的数据:
SELECT LEFT(timo, 2) + ':' + SUBSTRING(timo, 3, 2) + ':' + SUBSTRING(timo, 5, 2)
FROM
table1
我会将其转换为 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)))
我喜欢以正确的类型存储东西。
这是一个您可以尝试的示例(将其复制并粘贴到 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
函数选择字符串的一部分,例如序数 1 的前两个字符,然后是序数 3 的前两个字符,然后是序数 5,然后使用 CONCAT
组合这些部分。
以下是 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
SELECT CONCAT(SUBSTRING('170519', 1, 2), ':', SUBSTRING('170519',3, 2), ':', SUBSTRING('170519',5, 2))
这给了你正确的和卢克 17:05:19
我正在尝试 运行 使用标准 SQL 在 Big-Query 中进行查询。
我的 table 中有一个专栏,时间以这种格式显示: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
你可以这样做:
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
Returns 17:05:19
或使用您的数据:
SELECT LEFT(timo, 2) + ':' + SUBSTRING(timo, 3, 2) + ':' + SUBSTRING(timo, 5, 2)
FROM
table1
我会将其转换为 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)))
我喜欢以正确的类型存储东西。
这是一个您可以尝试的示例(将其复制并粘贴到 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
函数选择字符串的一部分,例如序数 1 的前两个字符,然后是序数 3 的前两个字符,然后是序数 5,然后使用 CONCAT
组合这些部分。
以下是 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
SELECT CONCAT(SUBSTRING('170519', 1, 2), ':', SUBSTRING('170519',3, 2), ':', SUBSTRING('170519',5, 2))
这给了你正确的和卢克 17:05:19