我有以下提取查询
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。
我该怎么做?
非常感谢您
答案 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)