我们可以在BigQuery中转换类型吗?

Rav*_*dra 20 google-bigquery

根据我的查询:

SELECT SQRT((D_o_latitude - T_s_lat)^ 2 +(D_o_longitude - T_s_long)^ 2)/0.00001 FROM [datasetName.tableName]

我收到错误错误:函数SUBTRACT中的参数类型不匹配:'D_o_latitude'是类型字符串,'T_s_lat'是类型字符串

所以让我知道我们可以将查询中的字符串类型转换为浮点数,例如转换数据类型,我无法更改数据类型

ope*_*eek 35

使用标准SQL,您可以使用CAST功能,例如.cast(numStringColumn as int64).请注意标准SQL类型名称,因为它们与旧SQL不完全相同.


Jor*_*ani 18

:在传统的SQL,您可以使用以下功能BigQuery中投类型INTEGER(),STRING(),BOOLEAN() TIMESTAMP(),和FLOAT().

使用cast()标准SQL(参见opensourcegeek的回答).

在你的情况下,你可以写:

SELECT SQRT((INTEGER(D_o_latitude) - T_s_lat)^2+(INTEGER(D_o_longitude) - T_s_long)^2)/0.00001 
FROM [datasetName.tableName]
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于BigQuery的Legacy SQL,而不适用于最新的Standard SQL.如下面针对标准SQL所讨论的那样使用CAST. (5认同)

nar*_*ary 6

正如其他人所建议的,BigQuery 支持CAST转换功能,其工作方式与标准 SQL 类似CAST

用法示例:

SELECT CAST('5.689' AS NUMERIC) as num;
-- num
-- 5.689

SELECT CAST('10E+2' AS NUMERIC) as num;
-- num
-- 1000

SELECT SAFE_CAST('1.123456789123' AS NUMERIC) as num;
-- num
-- 1.123456789
Run Code Online (Sandbox Code Playgroud)

尽管CASTBQ 支持,SAFE_CAST但建议使用 以避免在无法转换时查询失败。

来自文档:

使用 CAST 时,如果 BigQuery 无法执行转换,查询可能会失败。

如果您想保护您的查询免受这些类型的错误的影响,您可以使用SAFE_CAST. SAFE_CAST与 相同CAST,只不过它返回NULL而不是引发错误。

SELECT SAFE_CAST('not-a-number' AS NUMERIC) as num;
-- num
-- null
Run Code Online (Sandbox Code Playgroud)

注意SAFE_CAST在旧版 BigQuery SQL 中不可用。


IFNULL(或其他一些条件表达式)一起,可以更优雅地处理此类边缘情况/错误。

SELECT IFNULL(SAFE_CAST('not-a-number' AS NUMERIC), 0) as num;
-- num
-- 0
Run Code Online (Sandbox Code Playgroud)