在 DB2 中将 CHAR 插入 DATE
Posted
技术标签:
【中文标题】在 DB2 中将 CHAR 插入 DATE【英文标题】:Inserting a CHAR into DATE in DB2 【发布时间】:2020-04-13 17:39:03 【问题描述】:我遇到了问题。我有两个 DB2 表,对于这个问题,我们可以称它们为 Table1 和 Table2。 Table1 有一个名为 Birthdate 的列,它的数据类型为 CHAR,读起来像“19781205”。
我需要将 Table1 中的一些信息插入到 Table2 中。 Table2 有一个 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)
并收到此错误:为 DATE 指定的参数数量无效。
INSERT INTO TABLE2
(SELECT
Name, Cast(Birthdate as date) AS DATE_OF_BIRTH
FROM TABLE2)
并收到此错误:日期、时间或时间戳值 *N 无效。
这可能只是我一直在编码和工作太久的情况,以至于我无法理解它。
【问题讨论】:
添加破折号。例如“2017-04-29”。 不相关,但是:SELECT 周围的括号完全没用 【参考方案1】:这种语法应该可以工作:
insert into table2(name, birthdate)
select name, to_date(birthdate, 'yyyymmdd') from table1
这与您的第二次尝试非常接近,所以我怀疑这与您尝试的不完全一样。
请参阅 this demo on DB Fiddle 以供参考。
【讨论】:
【参考方案2】:添加破折号。例如:
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
【讨论】:
以上是关于在 DB2 中将 CHAR 插入 DATE的主要内容,如果未能解决你的问题,请参考以下文章