Добавление двоеточия после двух чисел с использованием стандартного SQL - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь выполнить запрос в Big-Query с использованием стандартного SQL.

В моей таблице есть столбец, в котором время представлено в следующем формате: 170519

Я хочу добавить двоеточие (:) после каждых двух чисел, чтобы получить такие результаты: 17: 05: 19

Как сделатья делаю это?

Я искал, но не смог найти решение этой проблемы.Может быть, я не ищу правильные слова?

Спасибо за помощь!

РЕДАКТИРОВАТЬ:

Итак @Ответ Гордона Линоффа работает для одного столбца.

Теперь, как мне использовать его при объединении двух столбцов?

Вот мой код, в котором я получаю синтаксическую ошибку:

SELECT
  CONCAT(FORMAT_DATE("%Y-%m-%d", PARSE_DATE('%d%m%Y',
        Date1)), '  ',(PARSE_TIME("%H%M%S",
        Time1)) AS Date_Time
  FROM

Ответы [ 4 ]

2 голосов
/ 10 мая 2019

Вот пример, который вы можете попробовать (скопируйте и вставьте его в редактор в 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 для объединения частей.

1 голос
/ 10 мая 2019

Я бы превратил его в тип данных time, а не в строку:

select parse_time('%H%M%S', '170519')

Если он начинается как число:

select parse_time('%H%M%S', cast(170519 as string))

Если вы хотите отформатироватьэто как строка, вы можете отформатировать время.Например, следующее поместило бы это в формат ЧЧ: ММ:

select format_time('%H:%M', parse_time('%H%M%S', cast(170519 as string)))

Я фанат хранения вещей в правильном типе.

1 голос
/ 10 мая 2019

Вы можете сделать что-то вроде этого:

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
0 голосов
/ 10 мая 2019

Ниже приведен пример для BigQuery Standard 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  
...