BigQuery Legacy SQL:将字符串转换为日期

时间:2018-02-12 18:45:47

标签: date google-bigquery legacy

希望转换表格形式的字符串' 04-OCT-16'到时间戳。最好在Legacy SQL中。

3 个答案:

答案 0 :(得分:2)

  

希望转换表格形式的字符串' 04-OCT-16'到时间戳

确实建议尽可能使用BigQuery Standard SQL

#standardsql
SELECT PARSE_TIMESTAMP('%d-%b-%y', '04-OCT-16')  

答案 1 :(得分:0)

如果要使用旧版SQL,可能的解决方案是将字符串格式的“月份”映射到数字,然后您可以在旧版SQL中使用 TIMESTAMP()函数。一个例子是使用 REGEXP_REPLACE()函数逐个映射所有月份:

SELECT TIMESTAMP( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE( REGEXP_REPLACE('04-JAN-16','JAN','01'), 'FEB', '02'), 'MAR', '03'), 'ABR', '04'), 'MAY', '05'), 'JUN', '06'), 'JUL', '07'), 'AUG', '08'), 'SEP', '09'), 'OCT', '10'), 'NOV', '11'),'DEC', '12') AS YOURTIMESTAMP;

您还可以创建表格以进行映射。在这种情况下,您需要连接两个表并使用函数 REGEXP_EXTRACT()。就我而言,我有一个名为“month_mapping”的表用于映射:

MONTH_STRING  MONTH_NUMBER
JAN           01
FEB           02
MAR           03
ABR           04
MAY           05
JUN           06
JUL           07
AUG           08
SEP           09
OCT           10
NOV           11
DEC           12

我有一个字符串形式为' 04-OCT-16'作为数据集“my_test”中“test”表中的“test”,我使用此查询进行映射:

SELECT
  REGEXP_REPLACE(test,REGEXP_EXTRACT(test,r'.\-([a-zA-Z]+)\-.'), MONTH_NUMBER)
FROM
  my_test.test a
JOIN
  my_test.month_mapping b
ON
  REGEXP_EXTRACT(a.test,r'.\-([a-zA-Z]+)\-.') = b.MONTH_STRING

如果您对旧版SQL有其他疑问,请在Google Doc中找到有关旧版SQL函数和操作符的完整文档。

答案 2 :(得分:0)

这适用于BigQuery 旧版SQL ,用于日期'字符串' YYYYMMDD

STRFTIME_UTC_USEC((PARSE_UTC_USEC(CONCAT)(左(字符串,4),' - ',左(右(字符串,4),2),' - ',右(字符串,2),'00:00:00 '))),“%Y-%m-%d”)为myDateField

请注意'00:00:00'中的空格

将字符串转换为日期是遗留sql的一个难点,但它在标准SQL中要简单得多。