为何我的BigQuery查询返回INT64而非DATE类型?
问题原因与解决方法
问题根源
你在使用EXECUTE IMMEDIATE时直接拼接DATE类型变量到SQL字符串,导致了类型异常:
- 当用
||连接DATE变量和字符串时,BigQuery会将DATE隐式转换为字符串格式(比如2023-10-19)。 - 但你用双引号将这个字符串括起来后,BigQuery会把
"2023-10-19"解析成算术表达式(2023 - 10 - 19 = 1994),最终返回整数类型,而非预期的DATE。
解决方法
方法1:使用参数化EXECUTE IMMEDIATE(推荐)
通过USING子句传递变量,既能保留变量的原始类型,又能避免SQL注入风险:
BEGIN DECLARE query STRING; DECLARE CTY INT64; DECLARE input_date DATE DEFAULT CURRENT_DATE("Europe/Paris"); SET CTY = EXTRACT(YEAR FROM input_date); SET query = """ SELECT @input_date, DATE(CURRENT_DATE("Europe/Paris")), @CTY """; EXECUTE IMMEDIATE query USING input_date AS input_date, CTY AS CTY; END;
方法2:正确拼接DATE字面量
将DATE变量转为字符串后用单引号包裹,并通过DATE()函数显式指定类型,确保BigQuery识别为日期:
BEGIN DECLARE query STRING; DECLARE CTY INT64; DECLARE input_date DATE DEFAULT CURRENT_DATE("Europe/Paris"); SET CTY = EXTRACT(YEAR FROM input_date); SET query = """ SELECT DATE('"""||CAST(input_date AS STRING)||"""'), DATE(CURRENT_DATE("Europe/Paris")), """||CTY||""" """; EXECUTE IMMEDIATE(query); END;
内容的提问来源于stack exchange,提问作者floutchfloutch
相关产品推荐
相关产品推荐

