我有两个表 Table1 和 Table2 ,它们的TestResult和Testcounts列均相同。 表1 的测试结果为varchar,而表2 的测试结果为数字。 我有一个字符串。例如,“ Oracle”作为 Table1 的varchar类型的testresult的值,需要将其插入到 Table2 的数字类型的testresult中,作为null。我这样做吗?任何建议将不胜感激:)
我有table1,其中列作为TestResult varchar2(50),Testcount的值分别为“ 0.5”,“ 0.6”,“ 0.8”,“ Oracle”,TestResult为1,2,3,4。 >
现在我有另一个表Table2作为TestResult号和Testcount号,没有值,换句话说,它是空的。我想将所有表1中的数据插入到表2中,并将“ Oracle”插入为“空”
答案 0 :(得分:2)
以下内容将满足您的要求:
INSERT INTO TABLE2 (TESTRESULT, TESTCOUNTS)
SELECT CASE
WHEN LENGTH(REGEXP_SUBSTR(TESTRESULT, '[0-9.]*')) = LENGTH(TESTRESULT) THEN TESTRESULT
ELSE NULL
END,
TESTCOUNTS
FROM TABLE1
答案 1 :(得分:0)
如果只有一个不能转换为数字的字符串值,并且要将其设置为null,则可以使用case表达式提供null:
insert into table2 (testresult, testcounts)
select case when testresult = 'Oracle' then null else to_number(testresult) end,
testcounts
from table1;
演示:
create table table1 (testresult varchar2(10), testcounts number);
insert into table1
select '0.5', 1 from dual
union all select '0.6', 2 from dual
union all select '0.8', 3 from dual
union all select 'Oracle', 4 from dual;
create table table2 (testresult number, testcounts number);
insert into table2 (testresult, testcounts)
select case when testresult = 'Oracle' then null else to_number(testresult) end,
testcounts
from table1;
select * from table2;
TESTRESULT TESTCOUNTS
---------- ----------
.5 1
.6 2
.8 3
4
如果您使用的是Oracle 12c第2版(或更高版本),则也可以尝试将字符串转换为数字,并使用default ... on conversion error
子句替换该null或任何其他非数字值:
insert into table2 (testresult, testcounts)
select to_number(testresult default null on conversion error), testcounts
from table1;
select * from table2;
TESTRESULT TESTCOUNTS
---------- ----------
.5 1
.6 2
.8 3
4
在早期版本中,您可以使用用户定义的函数执行相同的操作,该函数包装实际的to_number()
调用并在错误时返回null。或类似于@BobJarvis显示的正则表达式/翻译检查。
具有多行为null的行虽然会使数据难以解释,所以希望您只有这个固定值...