将字符串dd-mm-yyyy转换为bigquery中的yyyy-mm-dd

时间:2016-09-09 04:30:47

标签: sql google-bigquery

我在表格中有600个字符串字段,格式为例如18.05.2015,我想在bigquery中转换为 date 2015-05-18。我已经尝试使用timestamp()和date()函数,但它返回空值

2 个答案:

答案 0 :(得分:3)

在标准SQL中

SELECT PARSE_DATE('%d.%m.%Y', '18.05.2015')

对表的查询看起来像

SELECT PARSE_DATE('%d.%m.%Y', YourDateColumn)
FROM `YourDataset.YourTable`
  

添加到地址'已损坏'值

WITH YourTable AS (
  SELECT '18.05.2015' AS dt UNION ALL
  SELECT '#' AS dt 
)
SELECT 
  CASE WHEN REGEXP_CONTAINS(dt, r'\d{2}\.\d{2}\.\d{4}') 
    THEN CAST(PARSE_DATE('%d.%m.%Y', dt) AS STRING)
    ELSE dt 
  END AS new_dt
FROM YourTable

这样做 - 只处理符合18.05.2015格式的值并保留其他任何未触及的

  

我有多个日期列,包含600条记录

FINAL尝试解释您的评论 - 但老实说,仍然觉得这不是您所拥有的,而且您没有给出清晰的图片,所以我最好能为您制作!

CREATE TEMPORARY FUNCTION FIX(x STRING)
RETURNS STRING AS (
  CASE WHEN REGEXP_CONTAINS(x, r'\d{2}\.\d{2}\.\d{4}') 
  THEN CAST(PARSE_DATE('%d.%m.%Y', x) AS STRING) ELSE x END);

WITH YourTable AS (
  SELECT '18.05.2015' AS dt_001, '19.05.2015' AS dt_002, '21.05.2015' AS dt_003 UNION ALL
  SELECT '#' AS dt_001, '20.05.2015' AS dt_002, 'abc' AS dt_003
)
SELECT 
  FIX(dt_001) AS new_dt_001,
  FIX(dt_002) AS new_dt_002,
  FIX(dt_003) AS new_dt_003
FROM YourTable

答案 1 :(得分:1)

您可以使用以下查询将所有字符串字段从dd.mm.yyy更新为yyyy-mm-dd格式。

   update TABLE_NAME
      set FIELD_NAME = concat(SUBSTRING(FIELD_NAME,-4),'-',SUBSTRING(FIELD_NAME,-7,2),'-',SUBSTRING(FIELD_NAME,1,2))