在 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的主要内容,如果未能解决你的问题,请参考以下文章

DB2 - C 嵌入式 SQL 不会插入一行

DB2字段数据类型(常用)

在 DB2 中将当前日期转换为 char

在 DB2 中将位数据的 char 转换为整数

193 - 禁用批量插入和安全脚本

193 - 禁用批量插入和安全脚本