Проблема преобразования секунд в время в DB2 - PullRequest
0 голосов
/ 14 июня 2019

Проблема: некоторые строки содержат грязные данные, которые не могут быть преобразованы в дату, поэтому запрос не выполнен

  • в db2 дата хранится в секундах
  • при передаче данных на сервер sql мы конвертируем в datetime

    Запрос на преобразование в дату и время

select TIMESTAMP('1970-01-01', '00:00:00') +(Startdate/1000) SECONDS from tablename

  • некоторые строки содержат грязные данные, которые не могут быть преобразованы в дату

Нужен запрос для поиска данных об ошибке

Желаемый запрос:

select TIMESTAMP('1970-01-01', '00:00:00') +(Startdate/1000) SECONDS from tablename where iserror (TIMESTAMP('1970-01-01', '00:00:00') +(Startdate/1000) SECONDS) = 1

1 Ответ

0 голосов
/ 14 июня 2019

Вы можете создать скалярную функцию для подавления такой ошибки:

--#SET TERMINATOR @

create or replace function ms2ts(p_milliseconds bigint)
returns timestamp
contains sql
deterministic 
no external action
begin
  declare continue handler for sqlexception begin end;
  return TIMESTAMP('1970-01-01', '00:00:00') +(p_milliseconds/1000) SECONDS;
end@

-- Usage:
select *
from 
(
  select ms2ts(startdate) ts, Startdate
  from table(values 
    power(bigint(2), 45)
  , power(bigint(2), 60)
  ) tablename (Startdate)
)
-- where ts is null
@

TS                                 STARTDATE             
--------------------- ----------------------
3084-12-12 12:41:28.0         35184372088832        
<null>                   1152921504606846976   
...