【问题标题】:Inserting a CHAR into DATE in DB2在 DB2 中将 CHAR 插入 DATE
【发布时间】:2025-12-03 04:35:01
【问题描述】:

我遇到了问题。我有两个 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 周围的括号完全没用

标签: sql db2


【解决方案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
    

    【讨论】: