У меня есть таблица, где разные форматы даты. Я пытаюсь написать ниже запрос, который имеет логику, как если бы отдел был A, и если дата равна 01-окт-2010, это ноль, иначе сохранить исходную дату с измененным форматом. Я выполняю это в Импале. Существуют различные форматы даты, такие как:
M/d/yyyy
MM/d/yyyy
dd-MM-yyyy
и т. Д.
Мой запрос выглядит следующим образом.
select
CASE WHEN y.dept='MDM'
CASE WHEN
a.date=from_unixtime(unix_timestamp(a.date,'M/d/yyyy'),'M/d/yyyy')
AND from_unixtime(unix_timestamp(a.date,
'M/d/yyyy'),'yyyy-MM-dd HH:mm:ss') ='10-01-2010 00:00:00' THEN null
ELSE from_unixtime(unix_timestamp(a.date,
'M/d/yyyy'),'yyyy-MM-dd HH:mm:ss')
else
WHEN a.date=from_unixtime(unix_timestamp(a.date,
'MM/dd/yyyy'),'MM/dd/yyyy')
AND from_unixtime(unix_timestamp(a.date, 'MM/dd/yyyy'),'yyyy-MM-dd
HH:mm:ss') ='10-01-2010 00:00:00' THEN null
ELSE from_unixtime(unix_timestamp(a.date, 'MM/dd/yyyy'),'yyyy-MM-dd
HH:mm:ss')
End
Case WHEN a.date=from_unixtime(unix_timestamp(a.date,
'M/dd/yyyy'),'M/dd/yyyy')
AND from_unixtime(unix_timestamp(a.date, 'M/dd/yyyy'),'yyyy-MM-dd
HH:mm:ss') ='10-01-2010 00:00:00' THEN null
ELSE from_unixtime(unix_timestamp(a.date, 'M/dd/yyyy'),'yyyy-MM-dd
HH:mm:ss') End End
FROM Table INNER JOIN Table Y
ON y.id=a.id WHERE y.dept='MDM'
Я сравниваю формат даты A.date - если он совпадает
from_unixtime(unix_timestamp(a.date,'M/d/yyyy'),'M/d/yyyy')
и
from_unixtime(unix_timestamp(a.date, 'M/d/yyyy'),'yyyy-MM-dd HH:mm:ss') matches 1-Oct-2010
тогда ноль,
если нет, то оставьте исходную дату с измененным форматом на «гггг-мм-дд чч: мм: сс».
Беда в том, что моя инструкция Case выдает ошибку. Я могу выполнить все дела, когда с оператором Final Else правильно, но здесь мне нужно ELSE для каждого WHEN, поскольку мой формат даты отличается. Один ELSE в конце сделает большинство моих форматов дат нераспознанными и даст значение NULL.
Любые входные данные для исправления этого утверждения будут полезны