希望转换表格形式的字符串' 04-OCT-16'到时间戳。最好在Legacy SQL中。
答案 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中要简单得多。