提问人:Juanca 提问时间:8/31/2023 更新时间:9/1/2023 访问量:241
使用 bigquery 的 CAST - 无效的 NUMERIC 值:
CAST with bigquery - Invalid NUMERIC value:
问:
我正在尝试将值从字符串转换为整数或数字
我尝试转换的字符串是这样的:production-ross-3
但是当我运行 SELECT CAST('production-ross-3' as numeric) 时,它返回无效的 NUMERIC 值:production-ross-3
为什么?它应该从字符串转换为数字
我正在尝试将值从字符串转换为整数或数字
我尝试转换的字符串是这样的:production-ross-3
但是当我运行 SELECT CAST('production-ross-3' as numeric) 时,它返回无效的 NUMERIC 值:production-ross-3
答:
使用 CAST 时,如果 GoogleSQL 无法执行,则查询可能会失败 演员阵容。如果要保护查询免受这些类型的 错误,您可以使用SAFE_CAST。
在未成功映射的受支持类型之间进行强制转换 目标域的原始值会产生运行时错误。...
https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions
您错误地认为 cast 将(除了转换类型的既定任务外)找到给定字符串中的任何数字。但是,它只是不这样做,并且根据给出的警告,它产生了运行时错误。
要实现从字符串中提取所需的数字,您可以使用:
-- to get the first group of digits from the left
SELECT REGEXP_EXTRACT('production-ross-3', r'\d+') AS first_digits;
-- OR, to get all digits from the string
SELECT REGEXP_EXTRACT_ALL('production-ross-3', r'\d+') AS all_digits;
因此,为了实现总体预期结果,您可以将这些结合起来,例如:
SELECT CAST(REGEXP_EXTRACT('production-ross-3', r'\d+') AS INT64) AS extracted_number;
REGEXP_EXTRACT 有两个参数:要从中提取的字符串,以及定义要匹配的模式的正则表达式。这里 r'\d+' 是与字符串中的一个或多个数字匹配的正则表达式。裁判:
注意将字符串转换为任何形式的数字或日期都充满了困难,并且运行时错误并不少见。可以使用 SAFE_CAST 来避免这些运行时错误,但如果无法进行类型转换,则只会返回 NULL。
评论