圆括号SQL Oracle之间没有显示字符串

时间:2015-10-29 19:44:38

标签: sql oracle

我有一个以这些行为例的表:

城市:

San Francisco (CA)
Miami (FL)

结果我想要这个:

城市:

San Francisco
Miami

任何帮助?

问候。

3 个答案:

答案 0 :(得分:1)

您可以使用REGEX_REPLACE

CREATE TABLE tab(City VARCHAR(120));

INSERT INTO tab
VALUES ('San Francisco (CA)');

INSERT INTO tab
VALUES ('Miami (FL)');

SELECT TRIM(REGEXP_REPLACE(city, '\((.+?)\)', '')) AS City
FROM tab;

SqlFiddleDemo

如果您想UPDATE,可以使用:

UPDATE tab
SET City = TRIM(REGEXP_REPLACE(city, '\((.+?)\)', ''))
WHERE INSTR(City, '(') > 0;

SELECT City
FROM tab;

SqlFiddleDemo2

答案 1 :(得分:1)

为了论证,这里是一个REGEXP_SUBSTR()示例。它假设你想保留从第一个开始之前的所有内容,但不包括第一个开放式之前的空间。

SQL> with tbl(city) as (
     select 'San Francisco (CA)' from dual
     union
     select 'Miami (FL)' from dual
   )
   select regexp_substr(city, '^(.*) \(.*$', 1, 1, null, 1) new_city
   from tbl;

NEW_CITY
------------------
Miami
San Francisco

SQL>

编辑:添加了一个不需要TRIM()的REGEXP_REPLACE解决方案:

with tbl(city) as (
  select 'San Francisco (CA)' from dual
  union
  select 'Miami (FL)' from dual
)
select regexp_replace(city, '^(.*) \(.*$', '\1') new_city
from tbl;

答案 2 :(得分:0)

或者你可以做类似

的事情
SELECT CASE
         WHEN INSTR(CITY, '(') > 2 THEN
           SUBSTR(CITY, 1, INSTR(CITY, '(')-2)
         ELSE CITY
       END AS CITY
  FROM CITIES;

SQLFiddle here

祝你好运。