【发布时间】:2020-06-01 13:39:29
【问题描述】:
当通过 PHP 脚本从源表中选择时间戳(默认为空时可以为空)并尝试插入到相同的目标表中时, 我收到错误“日期、时间或时间戳值的语法无效 SQL 状态 22008”。我相信这是因为一些源记录是空的。当脚本运行时,我将大约一半的记录成功插入到我的目标表中,但只有那些具有实际时间戳值的记录。未插入空记录。
我的陈述:
SELECT
TIMESTAMP_EXPIRATION
FROM TABLE1;
INSERT INTO TABLE2 (EXPIRATION_T)
VALUES ($TIMESTAMP_EXPIRATION);
问题是我的源记录有一半是空的,另一半是6度的TIMESTAMP
源表和目标表的定义列分别为“TIMESTAMP_EXPIRATION FOR COLUMN 0011TTT TIMESTAMP DEFAULT NULL”和“EXPIRATION_T FOR COLUMN 00EETTT TIMESTAMP DEFAULT NULL”
我该怎么做才能让空值也插入?
更新:创建声明
CREATE TABLE TABLE1 (
ID INTEGER GENERATED ALWAYS AS IDENTITY (
START WITH 1 INCREMENT BY 1 ),
TIMESTAMP_EXPIRATION FOR COLUMN 0011TTT TIMESTAMP DEFAULT NULL )
RCDFMT TABLE1 ;
CREATE TABLE TABLE2 (
ID INTEGER GENERATED ALWAYS AS IDENTITY (
START WITH 1 INCREMENT BY 1 ),
EXPIRATION_T} FOR COLUMN 00EETTT TIMESTAMP DEFAULT NULL )
RCDFMT TABLE2 ;
更新:PHP 脚本
$getDev = "
SELECT
ID,
TIMESTAMP_EXPIRATION
FROM TABLE1
";
$stmt = odbc_exec($DB2connDEV, $getDev);
while($gettingItems = odbc_fetch_array($stmt)){
$rows[] = $gettingItems;
}
foreach($rows as $row){
$originalID = $row['ID'];
$expiration = $row['TIMESTAMP_EXPIRATION'];
$insertTable = "INSERT INTO table2 (id,expiration_t) VALUES (
$originalID,
'$expiration')";
$stmt = odbc_exec($DB2connPROD, $insertTable);
}
【问题讨论】:
-
粘贴最少的
CREATE TABLE...代码,我们可以用来在您的问题中重现您的问题。包括 TABLE1 和 TABLE2。当您尝试插入 NULL 时,$TIMESTAMP_EXPIRATION的值是多少?它是空的吗? (没有引号,没有空格,不是空字符串。) -
@MikeSherrill'CatRecall' 当我尝试插入空行时,我只是收到错误消息,但它根本没有插入。有问题的行将
<null>作为源表中的值 -
但是在控制台中打印这些行它只显示空白
-
请显示 PHP 脚本,以便我们可以看到正在传递的参数。请记住,空字符串与 PHP 和 SQL 中的
null不同。 -
@Parfait 也刚刚更新了 php 脚本