[英]Format string date like this “Mon Sep 11 2017 00:00:00 GMT+0200 (CEST)” with sql
Well everything is in the title. 好吧,一切都在标题中。 How can I format a string with the following date format : 如何使用以下日期格式格式化字符串:
Mon Sep 11 2017 00:00:00 GMT+0200 (CEST)
It's in a Big Query Table within a standard SQL query. 它在标准SQL查询的大查询表中。
I've started with this PARSE_DATE("%a %b %j %Y", Date)
but I don't really know how to handle what's left... 我已经从这个PARSE_DATE("%a %b %j %Y", Date)
但是我真的不知道如何处理剩下的内容...
thanks ! 谢谢 !
I'll start by simulating this type of data--everything uses CEST, but the days vary: 我将从模拟这种类型的数据开始-一切都使用CEST,但是日子各不相同:
WITH `project.dataset.table` AS (
SELECT
FORMAT_DATE('%a %b %d %Y GMT+0200', date) AS start_date,
FORMAT_DATE('%a %b %d %Y GMT+0200',
DATE_ADD(date, INTERVAL MOD(off, 7) DAY)) AS end_date
FROM UNNEST(GENERATE_DATE_ARRAY('2017-09-01', '2018-04-11', INTERVAL 7 DAY)) AS date WITH OFFSET off
)
SELECT
start_date,
end_date
FROM `project.dataset.table`;
This gives output that looks like Fri Oct 06 2017 00:00:00 GMT+0200
for start_date
and Wed Oct 11 2017 00:00:00 GMT+0200
for end_date
. 这使输出看起来像Fri Oct 06 2017 00:00:00 GMT+0200
的start_date
和Wed Oct 11 2017 00:00:00 GMT+0200
为end_date
。 Now to parse the date strings, we can use PARSE_DATE
in conjunction with REGEXP_EXTRACT
; 现在要解析日期字符串,我们可以将PARSE_DATE
与REGEXP_EXTRACT
结合使用; it's easiest to package the logic into a UDF for reuse in the query: 将逻辑打包到UDF中以在查询中重用是最简单的:
CREATE TEMP FUNCTION ConvertToDate(date_string STRING) AS (
PARSE_DATE('%b %d %Y', REGEXP_EXTRACT(date_string, r'[^ ]+ (.*)00:00:00'))
);
Combining it with the sample input, we now have the following query: 将其与样本输入结合起来,我们现在有了以下查询:
CREATE TEMP FUNCTION ConvertToDate(date_string STRING) AS (
PARSE_DATE('%b %d %Y', REGEXP_EXTRACT(date_string, r'[^ ]+ (.*)00:00:00'))
);
WITH `project.dataset.table` AS (
SELECT
FORMAT_DATE('%a %b %d %Y 00:00:00 GMT+0200', date) AS start_date,
FORMAT_DATE('%a %b %d %Y 00:00:00 GMT+0200',
DATE_ADD(date, INTERVAL MOD(off, 7) DAY)) AS end_date
FROM UNNEST(GENERATE_DATE_ARRAY('2017-09-01', '2018-04-11', INTERVAL 7 DAY)) AS date WITH OFFSET off
)
SELECT
ConvertToDate(start_date) AS start_date,
ConvertToDate(end_date) AS end_date
FROM `project.dataset.table`;
This returns real DATE
values for start_date
and end_date
, eg 2017-10-06
and 2017-10-11
. 这将返回start_date
和end_date
实际DATE
值,例如2017-10-06
和2017-10-11
。 To apply this to your own table, remove the WITH
clause and change the table name as appropriate. 要将其应用于您自己的表,请删除WITH
子句并适当更改表名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.