-
У меня есть дата, хранящаяся в
Epoch Time
, и я хочу извлечьDate
от него. Я попробовал код ниже, и я получаюnull
как вывод.date_add( (timestamp( Hp.ASSIGN_TIME)), 1970-01-01,"second" ) as Extracted_date_Epoch
Формат времени EX (1424184621000000)
-
Еще один вопрос. Код ниже дает мне дни правильно, но не рабочие дни, он дает все дни, возможно ли получить только рабочие дни между двумя моментами, хранящимися в эпоху Epoch?
INTEGER(((Hp.ASSIGN_TIME - Hp.ARRIVAL_TIME) / 1000000) / 86400) as Days
Как я могу извлечь дату из эпохи в BigQuery SQL
Ответ 1
Для преобразования timestamp
в date
вы можете использовать функции даты/времени BigQuery:
SELECT TIMESTAMP(1424184621000000) # 2015-02-17 14:50:21 UTC
SELECT TIMESTAMP_MICROS(1230219000000000) # 2008-12-25 15:30:00 UTC
SELECT TIMESTAMP_MILLIS(1230219000000) # 2008-12-25 15:30:00 UTC
SELECT DATE(TIMESTAMP(1424184621000000)) # 2015-02-17
SELECT DATE(TIMESTAMP('2015-02-17')) # 2015-02-17
SELECT INTEGER(TIMESTAMP('2015-02-17')) # 1424131200000000
Чтобы рассчитать количество дней между двумя датами (например, между 6/1/15 и 6/20/15), вы можете сделать это:
SELECT (DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)
И, наконец, для расчета рабочих дней вы можете использовать следующее:
SELECT
(DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)
-(INTEGER((DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1) / 7) * 2)
-(CASE WHEN DAYOFWEEK(TIMESTAMP('2015-06-01')) = 1 THEN 1 ELSE 0 END)
-(CASE WHEN DAYOFWEEK(TIMESTAMP('2015-06-20')) = 7 THEN 1 ELSE 0 END)
Это простой расчет рабочих дней с учетом субботы и воскресенья как выходных и без каких-либо праздников.
Ответ 2
Если вы используете стандартный диалект SQL в BigQuery, эта функция выполняет преобразование в удобочитаемую временную метку TIMESTAMP_MICROS (1424184621000000) → 2015-02-17 14:50:21 UTC. Ссылка: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#timestamp-string
Или TIMESTAMP_SECONDS(visitStartTime)
на несколько секунд, например, в Google Analytics.
Ответ 3
Если у вас есть опция Legacy SQL, чтобы ответить на вопрос 1, учитывая столбец времени эпохи UNIX в миллисекундах, например 1524375336000,
Я использовал SELECT USEC_TO_TIMESTAMP(Hp.ASSIGN_TIME * 1000) AS the_date FROM table;
╔═══╦═══════════════╦═════════════════════════════╗
║ ║ ASSIGN_TIME ║ the_date ║
╠═══╬═══════════════╬═════════════════════════════╣
║ 1 ║ 1524375336000 ║ 2018-04-22 05:35:36.000 UTC ║
╚═══╩═══════════════╩═════════════════════════════╝
USEC_TO_TIMESTAMP(<expr>)
Преобразует метку времени UNIX в микросекундах в тип данных TIMESTAMP.Пример:
SELECT USEC_TO_TIMESTAMP(1349053323000000);
https://cloud.google.com/bigquery/docs/reference/legacy-sql#usec_to_timestamp