我有一个以这些行为例的表:
城市:的
的San Francisco (CA)
Miami (FL)
的
结果我想要这个:
城市:的
的San Francisco
Miami
的
任何帮助?
问候。
答案 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;
祝你好运。