[英]Merge of two strings in Oracle SQL
有沒有辦法合並查詢中返回的兩個字符串,如下所示:我有一個字符串'<6 spaces>XYZ'
和其他字符串'<3 spaces>ABC<3 spaces>'
。 基本上每個字符串分為3個部分,任何部分中的兩個將為空白。 我想合並這兩個字符串以產生輸出: '<3 spaces> ABCXYZ'
。
另一個例子可以是'ABC<6 spaces>'
和字符串'<6 spaces>DEF'
應該產生'ABC<3 spaces>DEF>'
您可以利用空格按字母順序早於字母和數字的事實:
with q as (select ' ABC ' as c1,' DEF' as c2 from dual
union all select 'ABC ', ' DEF' from dual
union all select ' DEF ', 'ABC ' from dual
union all select ' DEF', ' ABC ' from dual
union all select 'ABC ', ' DEF ' from dual
union all select ' DEF', 'ABC ' from dual
)
select c1, c2,
GREATEST(SUBSTR(c1, 1, 3), SUBSTR(c2, 1, 3)) ||
GREATEST(SUBSTR(c1, 4, 3), SUBSTR(c2, 4, 3)) ||
GREATEST(SUBSTR(c1, 7, 3), SUBSTR(c2, 7, 3)) mrg
from q;
C1 C2 MRG
--------- --------- ---------
ABC DEF ABCDEF
ABC DEF ABC DEF
DEF ABC ABCDEF
DEF ABC ABCDEF
ABC DEF ABCDEF
DEF ABC ABC DEF
6 rows selected
SELECT t.column1,
t.column2,
CASE
WHEN REGEXP_LIKE(t.column1, '^\w{3}') AND REGEXP_LIKE(t.column2, '\w{3}$') THEN
TRIM(t.column1) || ' ' || TRIM(t.column2)
WHEN REGEXP_LIKE(t.column1, '^\w{3}') AND REGEXP_LIKE(t.column2, '\s{3}\w{3}') THEN
TRIM(t.column1) || TRIM(LEADING FROM t.column2)
WHEN REGEXP_LIKE(t.column1, '\s{3}\w{3}') AND REGEXP_LIKE(t.column2, '\w{3}$') THEN
TRIM(TRAILING FROM t.column1) || TRIM(t.column2)
WHEN REGEXP_LIKE(t.column2, '^\w{3}') AND REGEXP_LIKE(t.column1, '\w{3}$') THEN
TRIM(t.column2) || ' ' || TRIM(t.column1)
WHEN REGEXP_LIKE(t.column2, '^\w{3}') AND REGEXP_LIKE(t.column1, '\s{3}\w{3}') THEN
TRIM(t.column2) || TRIM(LEADING FROM t.column1)
WHEN REGEXP_LIKE(t.column2, '\s{3}\w{3}') AND REGEXP_LIKE(t.column1, '\w{3}$') THEN
TRIM(TRAILING FROM t.column2) || TRIM(t.column1)
END AS col
FROM table1 t
支持腳本:
CREATE TABLE "EXAMPLE"."TABLE1" (
"COLUMN1" VARCHAR2(9 BYTE),
"COLUMN2" VARCHAR2(9 BYTE)
);
Insert into TABLE1 (COLUMN1,COLUMN2) values (' ABC ',' DEF');
Insert into TABLE1 (COLUMN1,COLUMN2) values ('ABC ',' DEF');
Insert into TABLE1 (COLUMN1,COLUMN2) values (' DEF ','ABC ');
Insert into TABLE1 (COLUMN1,COLUMN2) values (' DEF',' ABC ');
Insert into TABLE1 (COLUMN1,COLUMN2) values ('ABC ',' DEF ');
Insert into TABLE1 (COLUMN1,COLUMN2) values (' DEF','ABC ');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.