使用案例来确定时间戳是否为'null'

时间:2018-08-16 02:59:09

标签: google-bigquery

我正在尝试构造一个案例,当BQ中的时间戳列上的语句称为version_end_ts。具体来说,我希望我的声明为:

当version_end_ts ='null'然后'active'否则'past'作为状态结束

问题是BQ告诉我它“无法将文字“ null”转换为TIMESTAMP”。如果没有时间戳,是否可以返回正标记?我搜寻了高低,找不到答案。

预先感谢您的帮助。

布莱恩

version_end_ts

2 个答案:

答案 0 :(得分:1)

我找不到与您的问题完全相同的副本,至少找不到BigQuery。在BigQuery(以及大多数SQL形式)中,NULL是一个特殊值,使用特殊操作符NULLIS NULL检查IS NOT NULL值是否存在。 。因此,您的CASE表达式应如下所示:

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

我们之所以需要使用IS NULL而不是=的原因是,NULL根据定义代表了一个未知的值。因此,用=运算符来比较未知的东西是没有意义的,因为那永远不会是真的。

答案 1 :(得分:1)

以下是另一种选择(BigQuery Standard SQL)

main()

这是首选项的问题-我通常更喜欢不太冗长的选项

您可以使用以下虚拟数据进行检查

IF(version_end_ts IS NULL, 'active', 'past') AS status   

结果为

#standardSQL
WITH `project.dataset.table` AS (
  SELECT NULL AS version_end_ts UNION ALL
  SELECT CURRENT_TIMESTAMP() 
)
SELECT 
  version_end_ts, 
  IF(version_end_ts IS NULL, 'active', 'past') AS status
FROM `project.dataset.table`