You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery SQL语法错误排查:将day_of_week转为星期字符串失败

解决BigQuery中UPDATE语句语法错误及字段类型转换问题

错误原因

你把SELECT查询和UPDATE更新语句写在同一个脚本中,BigQuery不支持在单个SQL语句里同时执行查询和更新操作,这直接导致了语法报错“Syntax error: Expected end of input but got identifier”。

正确解决方案

方案一:修改原表字段类型并更新值(直接修改原数据)

需要分两步执行:

  1. 先将day_of_week字段的整数类型改为字符串类型:
ALTER TABLE `my-data-project12345-368309.cyclistic_jamesbimler.2022_Q1`
ALTER COLUMN day_of_week SET DATA TYPE STRING;
  1. 再执行UPDATE语句替换为星期名称:
UPDATE `my-data-project12345-368309.cyclistic_jamesbimler.2022_Q1`
SET day_of_week = 
    CASE 
      WHEN day_of_week = '1' THEN 'Sunday'
      WHEN day_of_week = '2' THEN 'Monday'
      WHEN day_of_week = '3' THEN 'Tuesday'
      WHEN day_of_week = '4' THEN 'Wednesday'
      WHEN day_of_week = '5' THEN 'Thursday'
      WHEN day_of_week = '6' THEN 'Friday'
      WHEN day_of_week = '7' THEN 'Saturday'
    END
WHERE day_of_week IN ('1','2','3','4','5','6','7');

方案二:创建新表存储转换后的数据(不修改原表,更安全)

如果不想改动原始数据,可以直接通过查询生成包含转换后字段的新表:

CREATE OR REPLACE TABLE `my-data-project12345-368309.cyclistic_jamesbimler.2022_Q1_updated`
AS
SELECT
  ride_id,
  rideable_type,
  started_at,
  ended_at,
  start_station_name,
  start_station_id,
  end_station_name,
  end_station_id,
  start_lat,
  start_lng,
  end_lat,
  end_lng,
  member_casual,
  ride_length,
  ride_date,
  ride_month,
  ride_year,
  start_time,
  end_time,
  CASE 
    WHEN day_of_week = 1 THEN 'Sunday'
    WHEN day_of_week = 2 THEN 'Monday'
    WHEN day_of_week = 3 THEN 'Tuesday'
    WHEN day_of_week = 4 THEN 'Wednesday'
    WHEN day_of_week = 5 THEN 'Thursday'
    WHEN day_of_week = 6 THEN 'Friday'
    WHEN day_of_week = 7 THEN 'Saturday'
  END AS day_of_week,
  quarter
FROM `my-data-project12345-368309.cyclistic_jamesbimler.2022_Q1`;

注意:方案二中因为原字段是整数类型,所以CASE语句里直接用整数(WHEN day_of_week = 1)匹配即可,无需先转换为字符串。

内容的提问来源于stack exchange,提问作者bombfirst885

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:00:59