在SQL或BigQuery中将值''转换为null

时间:2018-09-18 12:09:04

标签: sql google-bigquery

我有以下提取查询

select A.documentid.Docid, A.documentId.Appid, A.timestamp, A.EventStatus, D.Sequence, D.EventAppName, E.Value as Federation

from `dbo.events` A left join `dam.eventsroot` B on A.documentid.docid = B.docid left join `dbo.documentroot` C on B.rootdocid=C.rootdocid 
inner join `dbo.reference_status` D

on A.DocumentID.AppID=D.EventAppID and A.EventStatus = D.EventStatus left join unnest(C.metadata) E on E.Key='Federation'

where A.timestamp > TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(),DAY)

结果是,在FEDERATION列中,我得到了不同的值和''(无)值,我想将它们更改为Null。

我该怎么做?

非常感谢您

3 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用诸如NULLIF(column , '')REPLACE(column,'',NULL)之类的函数。您可以使用LTRIM(RTRIM(column)),以便删除多余的空格。
像这样:

NULLIF(LTRIM(RTRIM(federation)), '')
REPLACE(LTRIM(RTRIM(federation)),'',NULL)

以及许多其他方式...

答案 1 :(得分:1)

我可以像这样简单地使用它

  select A.documentid.Docid, A.documentId.Appid, A.timestamp, A.EventStatus, 
         D.Sequence, D.EventAppName, 
         Case 
          When LTrim(RTrim(E.Value)) = '' Then Null
          Else E.Value
          End AS Federation

  from dbo.events A 
  left join dam.eventsroot B         on A.documentid.docid = B.docid 
  left join dbo.documentroot C       on B.rootdocid=C.rootdocid 
  inner join dbo.reference_status D  on A.DocumentID.AppID=D.EventAppID and 
                                        A.EventStatus = D.EventStatus 
  left join unnest(C.metadata) E     on E.Key='Federation'

  where A.timestamp > TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(),DAY)

答案 2 :(得分:0)

您可以在任何数据库中使用nullif()

select nullif(federation, '')

您可能通常希望删除空白,然后执行以下操作:

select nullif(trim(federation), '')

或者,也许:

select (case when trim(federation) <> '' then federation end)