我们正在使用 BigQuery 的非遗留 SQL 将 STRING 字段转换为 DATETIME 字段。
DATETIME 字段被诸如“None”和“0.0”之类的值损坏,这会导致我们的 CAST 语句失败。
我们看到,对于其他类型的 SQL,有 TRY-CATCH 函数和 ISNUMERIC() 测试——BigQuery 似乎不支持这两种测试。
这是一个捕获“无”但未能捕获随机浮点数或整数的示例:
CASE
WHEN UPDT_DT_TM LIKE 'None' THEN NULL
ELSE CAST(UPDT_DT_TM AS DATETIME)
END AS UPDT_DT_TM,
除了 BigQuery 中的用户定义函数 (UDF) - 是否还有其他方法可以创建 CASE 语句,该语句可以在可以转换为 DATETIME 的情况下转换为 DATETIME,否则只会将该值保留为 NULL?
最佳答案
您可以使用 SAFE_CAST
函数,如果在解释为所需类型时输入不是有效值,则返回 NULL。在您的情况下,您只需使用 SAFE_CAST(UPDT_DT_TM AS DATETIME)
.它在 Functions & Operators documentation .
关于datetime - 如何在 BigQuery SQL 中捕获失败的 CAST 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069173/