简体   繁体   English

使用sql格式化字符串日期,例如“ Mon Sep 11 2017 00:00:00 GMT + 0200(CEST)”

[英]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+0200start_dateWed Oct 11 2017 00:00:00 GMT+0200end_date Now to parse the date strings, we can use PARSE_DATE in conjunction with REGEXP_EXTRACT ; 现在要解析日期字符串,我们可以将PARSE_DATEREGEXP_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_dateend_date实际DATE值,例如2017-10-062017-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.

相关问题 从00:00 GMT到12:00 GMT修改SQL查询中的日期字段 - Modify Date Field in SQL Query from 00:00 GMT to 12:00 GMT 如何转换日期:2020 年 9 月 26 日 00:15:00,格式为 YYYY/MM/DD HH24:MI:SS' oracle sql - How to convert date : Sep 26 00:15:00 2020 in YYYY/MM/DD HH24:MI:SS' format in oracle sql 如何在 SQL 中将 '0 days 00:00:07.950855000' 字符串格式更改为秒 - How to change '0 days 00:00:07.950855000' string format to seconds in SQL 如何在SQL查询中将“ 23:00:00”时间更改为“ 11:00 PM”? - How Change the '23:00:00' time to something like '11:00PM' in sql query? SQL Server:使用dateadd(m,-6,date)我需要从'2014-11-30 00:00:00'减去6个月,但是得到的'2014-05-30 00:00:00'是不正确 - SQL Server: Using dateadd(m,-6, date) I need to subtract 6 months from '2014-11-30 00:00:00', but, getting '2014-05-30 00:00:00' which is incorrect 字符串日期到 SQL 日期时间的转换 'Mon Dec 09 2019 12:00:54' - String date to SQL datetime conversion 'Mon Dec 09 2019 12:00:54' 将GMT 0:00转换为GMT +5:30 sql - convert GMT 0:00 to GMT +5:30 sql 带+00:00的ORACLE日期格式 - ORACLE date format with +00:00 part sql日期格式从2013-04-01 00:00:00.000转换为2013-04-01 12:00:00 - sql date format convert from 2013-04-01 00:00:00.000 to 2013-04-01 12:00:00 将秒转换为“00:00:00”格式 - SQL Server - Convert seconds to '00:00:00' format - SQL Server
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM