Я знаю, что на этот вопрос уже дан ответ, но следующее демонстрирует, возможно, более чистый и более прямой подход.
Предположим, что значение CHAR, которое вы хотите преобразовать, равно «20140101», тогда вы можете сделать либо:
select date('20140101'||'000000') from sysibm.sysdummy1;
или
select timestamp('20140101'||'000000') from sysibm.sysdummy1;
Ниже приведен более полный пример с большим количеством функций и преобразований, который демонстрирует выбор и преобразование данных из фактической (хотя и временной) таблицы:
-- Create a temp table to demonstrate with:
declare global temporary table DateExample (
ID Integer,
RealTSField Timestamp,
DateCharField CHAR(8),
TSCharField CHAR(20)
) with replace;
-- Insert a demo record to work with:
insert into session.DateExample values(1, '2014-01-01 12:30:23.123456', '20140101', '20140101123023123456');
-- Show what's in the table at this point:
select * from session.DateExample;
-- Now show the conversions in action:
select
d.*,
date(DateCharField||'000000') DateFromDateCharField, -- implicit conversion from YYYYMMDD via tacking on HHMISS as '000000' string
timestamp(DateCharField||'000000') TSFromDateCharField, -- implicit conversion from YYYYMMDD via tacking on HHMISS as '000000' string
timestamp(LEFT(TSCharField,14)) TSFromTSCharField, -- implicit conversion does not support fractional seconds hence we must use LEFT()
timestamp_format(TSCharField, 'YYYYMMDDHH24MISSNNNNNN') TSFromCharField_ExplicitFormat --explicit conversion with timestamp_format
from session.DateExample d;
Вероятно, самый простой способ попробовать это - вставить окно Ops Navigator «Run SQL Scripts», навести курсор на первую строку, а затем несколько раз нажать Ctrl-Y, чтобы последовательно выполнить каждый следующий оператор.