DB2 中union 查询碰见的空值问题
INSERT INTO TEMP_3 (ID, NAME)
SELECT T.ID, T.NAME---ID 为varchar类型
FROM
(
SELECT ID, NAME FROM TEMP_1---ID 为varchar类型
UNION
SELECT NULL ID, NAME FROM TEMP_2
) T
----
在以上的union 脚本中,运行报错,然后我把脚本改为
INSERT INTO TEMP_3 (ID, NAME)
SELECT T.ID, T.NAME
FROM
(
SELECT ID, NAME FROM TEMP_1
UNION
SELECT '' AS ID, NAME FROM TEMP_2--NULL 改为''
) T
就可以执行插入脚本。
问题1:在DB2中 union脚本如果碰见以上这种情况,是否只能用''替换NULL ?
----------------
在改为''后 我union 脚本可以运行了,但是碰见一个问题,如果 我插入的目标表 temp_3 中 ID 这个字段的字段类型是 DECIMAL(4, 0),那么 我必须把脚本改为这样,把id 字段做类型转换
INSERT INTO TEMP_3 (ID, NAME)
SELECT CAST(T.ID AS DECIMAL (4,0)), T.NAME---temp_3 ID 为DECIMAL类型
FROM
(
SELECT ID, NAME FROM TEMP_1---ID 为VARCHAR类型
UNION
SELECT '' ID, NAME FROM TEMP_2
) T
-----
这个脚本运行报错,原因是 在查询结果中 ID 字段中存在 '' 这个值,无法做转换,如果 我把脚本换成
INSERT INTO TEMP_3 (ID, NAME)
SELECT CAST(T.ID AS DECIMAL (4,0)), T.NAME---temp_3 ID 为DECIMAL类型
FROM
(
SELECT ID, NAME FROM TEMP_1---ID 为VARCHAR类型
UNION
SELECT '0' ID, NAME FROM TEMP_2
) T
---即把原来的''默认为'0',这样就可以通过执行。
问题2 :是否 ''只能给他附上一个默认值,比如0 才可以执行DECIMAL 的转换?
有没有其他办法,因为有时候并不能想当然的写一个默认值,因为选择的默认值0可能在该字段中已经被赋予了其他的意义。
以上2个问题 是一并的。刚开始学DB2的sql。很多不会,有劳各位了
这2个问题都可以用cast来解决
INSERT INTO TEMP_3 (ID, NAME)
SELECT T.ID, T.NAME---ID 为varchar类型
FROM
(
SELECT ID, NAME FROM TEMP_1---ID 为varchar类型
UNION
SELECT CAST( NULL AS CHAR ) as ID, NAME FROM TEMP_2
) T