使用 bigquery 的 CAST - 无效的 NUMERIC 值:

CAST with bigquery - Invalid NUMERIC value:

提问人:Juanca 提问时间:8/31/2023 更新时间:9/1/2023 访问量:241

问:

我正在尝试将值从字符串转换为整数或数字

我尝试转换的字符串是这样的: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

sql google-bigquery 转换 sql-convert

评论

0赞 Craig 8/31/2023
您是否不确定数据类型之间的转换/转换是什么?像“production-ross-3”这样的字符串永远不会被识别为任何类型的有效数字,所以我无法真正计算出您实际期望 CAST 产生的结果?
0赞 Adrian Maxwell 8/31/2023
不,选角是魔术。“3”可以转换为数字。“我期望从魔法中获得三个”不能被投射到一个数字上。回顾文献。
0赞 Community 8/31/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。
0赞 Juanca 8/31/2023
文档显示,强制转换有助于从字符串转换为数字、整数或其他类型。我看过一些视频,您可以在其中将字符串转换为数字,例如 carlos25 并且可以工作,也许在 bigquery 中是不同的,或者有替代方案,这就是我要问的.....

答:

0赞 Adrian Maxwell 9/1/2023 #1

使用 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。