使用标准 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