我正在解析一些HTTP Header字段,我的输入是RFC 1123格式的日期时间。例如:“星期三,2012年11月21日23:10:20 GMT”
我需要将上面的字符串转换为BigQuery中的标准TIMESTAMP日期类型,这意味着我需要将其转换为YYYY-MM-DD HH:MM:SS [.uuuuuu]。我想知道什么是前进的最佳方式。我最初的方法是多次使用REGEXP_REPLACE,但我确信有更好的方法。
使用strftime格式的输入格式为'%a,%d%b%Y%H:%M:%S'需要以某种方式转换为YYYY-MM-DD HH:MM: SS
让我知道
答案 0 :(得分:1)
在SQL中解决此问题的过于复杂的方法:
SELECT TIMESTAMP(SUBSTR(date, 13, 4)+'/'+month_number+'/'+SUBSTR(date, 6, 2)+' '+SUBSTR(date, 18, 8)) ts
FROM
(SELECT 'Wed, 21 Aug 2012 23:10:20 GMT' date) a
CROSS JOIN
(SELECT STRING(POSITION(month)) month_number, month FROM (SELECT SPLIT(months) month
FROM (SELECT 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec' months))) b
WHERE SUBSTR(date, 9, 3)=b.month
将(SELECT 'Wed, 21 Aug 2012 23:10:20 GMT' date)
替换为您自己的表格。
答案 1 :(得分:1)
我终于在下面的SQL中找到了一个繁琐但有效的解决方案,我相信它有很好的机会使它更有效率
select DATE(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(<insert_date>,
r'(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[,] ',''),
r' GMT',''),
r'Jan', '01'),
r'Feb', '02'),
r'Mar', '03'),
r'Apr', '04'),
r'May', '05'),
r'Jun', '06'),
r'Jul', '07'),
r'Aug', '08'),
r'Sep', '09'),
r'Oct', '10'),
r'Nov', '11'),
r'Dec', '12'),
r'(\S+)\s(\S+)\s(\S+)\s(\S+)',r'\3-\2-\1 \4'))
from <table>;
答案 2 :(得分:0)
在Python中你可以这样做:
import datetime
from dateutil import parser
date_object = parser.parse('Wed, 21 Nov 2012 23:10:20 GMT')
date_object.strftime('%Y-%m-%d %H:%M:%S GMT')