首页 > 解决方案 > 使用 case when 来识别 timestamp = 'null'

问题描述

我正在尝试在 BQ 中对名为 version_end_ts 的时间戳列构建一个 case when 语句。具体来说,我希望我的声明如下:

version_end_ts = 'null' then 'active' else 'past' end as status 的情况

问题是 BQ 告诉我它“无法将文字“null”转换为类型 TIMESTAMP”。如果时间戳丢失,有没有办法在我的情况下返回一个积极的标志?我搜索了高低,找不到这个答案。

预先感谢您的帮助。

布赖恩

version_end_ts

标签: google-bigquery

解决方案


我找不到您的问题的确切副本,至少 BigQuery 找不到。在 BigQuery(以及大多数 SQL 风格)中,NULL是一个特殊值,检查值的存在/不存在NULL使用特殊运算符IS NULLand IS NOT NULL。所以你的CASE表达应该是这样的:

CASE WHEN version_end_ts IS NULL THEN 'active' ELSE 'past' END AS status

我们需要使用IS NULL而不是的原因=NULL,根据定义,它代表一个未知的值。因此,将未知的事物与运算符进行比较是没有意义的=,因为它永远不会是真的。


推荐阅读