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