使用 bigquery 进行 CAST - 无效的数字值:

问题描述 投票:0回答:1

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

我尝试投射的字符串是这样的: Production-ross-3

但是当我运行 SELECT CAST('product-ross-3' as numeric) 时,它返回 Invalid NUMERIC value: production-ross-3

为什么?它应该从字符串转换为数字

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

我尝试投射的字符串是这样的: Production-ross-3

但是当我运行 SELECT CAST('product-ross-3' as numeric) 时,它返回 Invalid NUMERIC value: production-ross-3

sql google-bigquery casting sql-convert
1个回答
0
投票

使用 CAST 时,如果 GoogleSQL 无法执行,查询可能会失败 演员阵容。如果您想保护您的查询免受这些类型的影响 错误,您可以使用 SAFE_CAST。

在未成功映射的受支持类型之间进行转换 目标域的原始值会产生运行时错误。 ...

https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions

您错误地假设强制转换(除了其规定的转换类型任务之外)将定位给定字符串中的任何数字。然而它只是没有这样做,并且根据给出的警告,它产生了运行时错误。

要实现从字符串中提取数字的目的,您可以使用:

-- 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+' 是一个正则表达式,匹配字符串中的一个或多个数字。 参考:

nb 将字符串转换为任何形式的数字或日期都充满困难,并且运行时错误并不罕见。您可以使用 SAFE_CAST 来避免这些运行时错误,但如果无法进行类型转换,则只会返回 NULL。

© www.soinside.com 2019 - 2024. All rights reserved.