2016-04-25 170 views
0

我正在尝试为以下代码编写SQL语句或简单的过程。 有列名:department_name包含以下字符串的字符:将字符串拆分为2列Oracle

First Name&Second Name [W] 

我需要拆分两件事情: 在一列在第二列名为department_name[W]First Name&Second Name称为department_code

我需要做几百行。 在这种情况下,过程或sql语句将如何显示? 长度字符串和部门名称不同的字数的..

+0

如果department_code显示为[104],您希望第二列显示** [104] **(带方括号)还是仅显示** 104 **? – mathguy

+0

我只需要104 – m4ndy

回答

0
SELECT TRIM(SUBSTR(department_name, 1, INSTR(department_name, '[') - 1)) 
     AS department_name, 
     SUBSTR(department_name, INSTR(department_name, '[')) 
     AS department_code 
FROM your_table; 

SELECT REGEXP_SUBSTR(department_name, '(.*?)\s*(\[.*?\])', 1, 1, NULL, 1) 
     AS department_name, 
     REGEXP_SUBSTR(department_name, '(.*?)\s*(\[.*?\])', 1, 1, NULL, 2) 
     AS department_code 
FROM your_table; 

,或者,如果你不想在部门代码,然后括号:

SELECT REGEXP_SUBSTR(department_name, '(.*?)\s*\[(.*?)\]', 1, 1, NULL, 1) 
     AS department_name, 
     REGEXP_SUBSTR(department_name, '(.*?)\s*\[(.*?)\]', 1, 1, NULL, 2) 
     AS department_code 
FROM your_table; 
+0

Thx它非常有用。 – m4ndy

+0

@ m4ndy如果答案已经解决了您的问题,那么您可以将其标记为已接受(表决按钮下方的绿色复选标记),表示该问题已关闭。如果它还没有解决你的问题,那么你可以添加评论与悬而未决的问题和/或编辑你的问题。 – MT0