Select 在 Oracle 中列为列 SQL
Select list as column in Oracle SQL
我想将几行附加到已经存在的 table(准确地说是 15 行)。最快的方法是什么?
这有效,但似乎多余。
select person_id from people_table
union all
select '0010' as person_id from dual
union all
select '0019' as person_id from dual
union all
select '0085' as person_id from dual
我想知道是否有解决方案:
select person_id from people_table
union all
select ('0010','0019','0085') as person_id from dual
请注意,我想保留列表中每个元素的前导零。 This post is almost what I'm looking for,但它将每个元素转换为整数并删除前导零。
您需要使用层级查询如下:
select person_id from people_table
union all
select regexp_substr('0010,0019,0085','[^,]+',1,level)
from dual
connect by level <= length (regexp_replace('0010,0019,0085', '[^,]+')) + 1 ;
请使用正则表达式使用下面的查询,
select person_id from people_table
union all
select distinct trim(regexp_substr(('0010,0019,0085'),'[^,]+', 1, level) ) as person_id
from dual
connect by regexp_substr(('0010,0019,0085'), '[^,]+', 1, level)
order by level;
您可以使用系统提供的集合类型;您使用 TABLE
运算符从它 select (即使自 Oracle 12 以来不再需要,正如我在下面演示的那样)。请注意,列名称是 COLUMN_NAME
- 这是 Oracle 在创建系统提供的类型时选择的名称。
让我们创建一个小的 table 用于测试:
create table people_table (person_id varchar2(10), person_name varchar2(10));
insert into people_table (person_id, person_name) values ('2003', 'Maria');
insert into people_table (person_id, person_name) values ('2005', 'Peter');
然后,您可以按以下方式做您想做的事情:
select person_id from people_table
union all
select column_value from sys.odcivarchar2list('1000', '1001', '1002')
;
PERSON_ID
---------
2005
2003
1000
1001
1002
如果您不熟悉 Google 搜索 SYS.ODCIVARCHAR2LIST
(以及类似的 SYS.ODCINUMBERLIST
);很有用。
我想将几行附加到已经存在的 table(准确地说是 15 行)。最快的方法是什么?
这有效,但似乎多余。
select person_id from people_table
union all
select '0010' as person_id from dual
union all
select '0019' as person_id from dual
union all
select '0085' as person_id from dual
我想知道是否有解决方案:
select person_id from people_table
union all
select ('0010','0019','0085') as person_id from dual
请注意,我想保留列表中每个元素的前导零。 This post is almost what I'm looking for,但它将每个元素转换为整数并删除前导零。
您需要使用层级查询如下:
select person_id from people_table
union all
select regexp_substr('0010,0019,0085','[^,]+',1,level)
from dual
connect by level <= length (regexp_replace('0010,0019,0085', '[^,]+')) + 1 ;
请使用正则表达式使用下面的查询,
select person_id from people_table
union all
select distinct trim(regexp_substr(('0010,0019,0085'),'[^,]+', 1, level) ) as person_id
from dual
connect by regexp_substr(('0010,0019,0085'), '[^,]+', 1, level)
order by level;
您可以使用系统提供的集合类型;您使用 TABLE
运算符从它 select (即使自 Oracle 12 以来不再需要,正如我在下面演示的那样)。请注意,列名称是 COLUMN_NAME
- 这是 Oracle 在创建系统提供的类型时选择的名称。
让我们创建一个小的 table 用于测试:
create table people_table (person_id varchar2(10), person_name varchar2(10));
insert into people_table (person_id, person_name) values ('2003', 'Maria');
insert into people_table (person_id, person_name) values ('2005', 'Peter');
然后,您可以按以下方式做您想做的事情:
select person_id from people_table
union all
select column_value from sys.odcivarchar2list('1000', '1001', '1002')
;
PERSON_ID
---------
2005
2003
1000
1001
1002
如果您不熟悉 Google 搜索 SYS.ODCIVARCHAR2LIST
(以及类似的 SYS.ODCINUMBERLIST
);很有用。