Кажется, что у вас много мусорных данных, поэтому прежде всего вам следует проверить, являются ли данные действительной отметкой времени в том формате, который вы ожидаете ('2011/11/15 20: 58: 48.041').Мы могли бы использовать простое решение - просто замените все цифры на «0» и проверьте формат результата:
TRANSLATE(timestamp_column,'0','0123456789','0') = '0000/00/00 00:00:00.000'
Если формат является ожидаемым, вы должны преобразовать в метку времени DB2.В DB2 для iSeries есть встроенная функция начиная с V6R1 TIMESTAMP_FORMAT .В вашем случае это будет выглядеть так:
TIMESTAMP_FORMAT('2011/11/15 20:58:48.041','YYYY/MM/DD HH24:MI:SS.NNNNNN')
Таким образом, объединенный запрос решения должен выглядеть примерно так:
SELECT
CASE
WHEN TRANSLATE(timestamp_column,'0','0123456789','0') = '0000/00/00 00:00:00.000'
THEN TIMESTAMP_FORMAT(timestamp_column,'YYYY/MM/DD HH24:MI:SS.NNNNNN')
ELSE NULL
END
FROM
your_table_with_bad_data
EDIT
Я только что увидел ваш комментарийэтот поставщик согласился очистить данные.Вы можете использовать предоставленное решение для ускорения процесса и очистки данных самостоятельно:
ALTER your_table_with_bad_data ADD COLUMN clean_timestamp TIMESTAMP DEFAULT NULL;
UPDATE your_table_with_bad_data
SET clean_timestamp =
CASE
WHEN TRANSLATE(timestamp_column,'0','0123456789','0') = '0000/00/00 00:00:00.000'
THEN TIMESTAMP_FORMAT(timestamp_column,'YYYY/MM/DD HH24:MI:SS.NNNNNN')
ELSE NULL
END;