Вставка CHAR в DATE в DB2 - PullRequest
       5

Вставка CHAR в DATE в DB2

0 голосов
/ 13 апреля 2020

Я столкнулся с проблемой. У меня есть две таблицы DB2, мы можем назвать их Table1 и Table2 для этого вопроса. В таблице 1 есть столбец с именем Birthdate, который имеет тип данных CHAR и читается как «19781205».

Мне нужно вставить некоторую информацию из таблицы 1 в таблицу 2. Таблица 2 имеет столбец DATE_OF_BIRTH с типом данных DATE. Мне нужно вставить Table1.Birthdate в Table2.DATE_OF_BIRTH.

Я попробовал следующее, основываясь на том, что видел онлайн:

INSERT INTO TABLE2
(SELECT Name, TO_DATE(Birthdate,'yyyy-mm-dd') AS DATE_OF_BIRTH
FROM TABLE1)

И получил эту ошибку: ЗНАЧЕНИЕ НЕ СОВМЕСТИМ С ТИПОМ ДАННЫХ ЕГО ЦЕЛИ. НАЗВАНИЕ ЦЕЛЯ DATE_OF_BIRTH.

INSERT INTO TABLE2
(SELECT
Name, DATE(Birthdate, 'YYYYMMDD') AS DATE_OF_BIRTH
FROM TABLE1)

И получил эту ошибку: КОЛИЧЕСТВО АРГУМЕНТОВ, УКАЗАННЫХ НА ДАТУ, НЕДОПУСТИМО.

INSERT INTO TABLE2
(SELECT
Name, Cast(Birthdate as date) AS DATE_OF_BIRTH
FROM TABLE2)

И получил эту ошибку: ДАТА, ВРЕМЯ ИЛИ ВРЕМЕНА ЗНАЧЕНИЕ * N НЕДОПУСТИМО.

Вероятно, это всего лишь случай, когда я слишком долго кодировал и работал над этим, что я не могу обернуть голову вокруг него.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Добавить тире. Например:

create table a (d char(8));

insert into a (d) values ('20200107');
insert into a (d) values ('20170429');

create table b (d date);

insert into b (d)
select substr(d, 1, 4) || '-' ||
       substr(d, 5, 2) || '-' ||
       substr(d, 7, 2)
from a      

Тогда:

select * from b;

Возвращает:

D         
----------
2020-01-07
2017-04-29
0 голосов
/ 13 апреля 2020

Этот синтаксис должен просто работать:

insert into table2(name, birthdate)
select name, to_date(birthdate, 'yyyymmdd') from table1

Это очень близко к вашей второй попытке, поэтому я подозреваю, что это не совсем то, что вы пытались.

См. эта демонстрация на DB Fiddle для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...