使用自定义格式字符串的时间戳

Bac*_*lin 2 google-bigquery

我将数据从BigQuery移动到Oracle数据库,并试图找到处理时间戳的最佳方法.Oracle DB只能导入日期为小端格式(dd/mm/yyyy hh:mi:ss)的csv文件,但默认情况下BigQuery仅支持big endian(yyyy-mm-dd hh:mi:ss).

SELECT
  t,
  STRING(t) s
FROM
  (SELECT TIMESTAMP(132456789101112) t)
Run Code Online (Sandbox Code Playgroud)
Row   t                         s
1     1974-03-14 01:33:09 UTC   1974-03-14 01:33:09.101112
Run Code Online (Sandbox Code Playgroud)

我当然可以提取时间戳的不同组件并手动将它们粘贴在一起(见下文)或编写一些聪明的UDF,但如果没有任何方法可以使用BigQuery的标准功能,我会感到惊讶.这似乎是一件很平常的事情,我实际上犹豫要求一些时间.

SELECT
  t,
  CONCAT(
    RIGHT(CONCAT("0", STRING(DAY(t))), 2), "/",
    RIGHT(CONCAT("0", STRING(MONTH(t))), 2), "/",
    RIGHT(CONCAT("000", STRING(YEAR(t))), 4), " ",
    TIME(t)
  ) s
FROM
  (SELECT TIMESTAMP(132456789101112) t)
Run Code Online (Sandbox Code Playgroud)
Row   t                         s    
1     1974-03-14 01:33:09 UTC   14/03/1974 01:33:09
Run Code Online (Sandbox Code Playgroud)

是否有类似FORMAT(t, "dd/mm/yyyy hh:mi:ss")的方法或使用regexp的方法?(无需连续几个REGEXP_EXTRACT.)

Mik*_*ant 7

检查STRFTIME_UTC_USEC

SELECT STRFTIME_UTC_USEC(CURRENT_TIMESTAMP(), '%d/%m/%Y %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

或者用你的例子

SELECT STRFTIME_UTC_USEC(TIMESTAMP(132456789101112), '%d/%m/%Y %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)


Ale*_*her 5

对于使用Bigquery的标准SQL的用户,正确的方法是

FORMAT_TIMESTAMPFORMAT_DATE取决于您的输入。

例如:

SELECT FORMAT_TIMESTAMP('%Y/%m/%d', TIMESTAMP('2017-11-01')) 将返回 2017/11/01