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

时间:2016-05-05 09:07:58

标签: google-bigquery

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

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

我当然可以提取时间戳的不同组件并手动将它们粘贴在一起(见下文)或写一些聪明的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)
Row   t                         s    
1     1974-03-14 01:33:09 UTC   14/03/1974 01:33:09

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

3 个答案:

答案 0 :(得分:6)

检查STRFTIME_UTC_USEC

SELECT STRFTIME_UTC_USEC(CURRENT_TIMESTAMP(), '%d/%m/%Y %H:%M:%S')

或您的示例

SELECT STRFTIME_UTC_USEC(TIMESTAMP(132456789101112), '%d/%m/%Y %H:%M:%S')

答案 1 :(得分:2)

对于那些使用Bigquery标准SQL的人来说,正确的方法是使用

$(document).ready(function(){ sigin(); }); function sigin() { $("#Idselection").show(); $("#cutname").hide(); $("#cpass").hide(); } function signUp() { $("#Idselection").hide(); $("#cutname").show(); $("#cpass").show(); }<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select id="Idselection"> <option>opt1</option> <option>opt2</option> <option>opt3</option> </select><br/> <input id="cutname" type='text' placeholder="Customer Name" /><br/> <input id="email" type='text' placeholder="Email *" /><br/> <input id="pass" type='text' placeholder="Password *" /><br/> <input id="cpass" type='text' placeholder="Confirm Password *" /><br/> <input id="btnsigin" type='Button' onclick="sigin()" value="SignIn"/> <br/> <input id="btnsignup" type='Button' onclick="signUp()" value="Sign Up" /><br/>取决于您的输入。

例如:

FORMAT_TIMESTAMP 将返回 FORMAT_DATE

答案 2 :(得分:1)

它不是一个简单的功能,但它确实起作用......

SELECT
  t,
  CONCAT( LPAD(STRING(DAY(t)),2,"0"),"/",LPAD(STRING(MONTH(t)),2,"0"),"/",STRING(YEAR(t))," ",TIME(t)) s
FROM (
  SELECT
    TIMESTAMP(132456789101112) t)