Преобразовать значение '' в null в SQL или BigQuery - PullRequest
0 голосов
/ 18 сентября 2018

У меня следующий запрос на извлечение

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 голосов
/ 18 сентября 2018

есть такие функции, как NULLIF(column , '') и REPLACE(column,'',NULL), которые вы можете использовать в таких случаях.Вы можете использовать LTRIM(RTRIM(column)), поэтому любые лишние пробелы будут удалены.
, например:

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

и так много других способов ...

0 голосов
/ 18 сентября 2018

Я мог бы использовать это простым способом, как

  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)
0 голосов
/ 18 сентября 2018

Вы можете использовать nullif() в любой базе данных:

select nullif(federation, '')

Возможно, вы захотите удалить пробел в целом и выполните:

select nullif(trim(federation), '')

Или, возможно:

select (case when trim(federation) <> '' then federation end) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...