使用标准SQL在两个数字之后添加冒号

时间:2019-05-10 15:24:25

标签: sql google-bigquery standard-sql

我正在尝试使用标准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

5 个答案:

答案 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