replace('ABC-DEF', '-')
和
regexp_replace('ABC-DEF', '-$')
幫我刪除破折號後的所有字符,但我一直沒能找到一個很好的功能或表達式匹配什麼,我想做。什麼是一個很好的oracle表達呢?
ABC-DEF => ABC
replace('ABC-DEF', '-')
和
regexp_replace('ABC-DEF', '-$')
幫我刪除破折號後的所有字符,但我一直沒能找到一個很好的功能或表達式匹配什麼,我想做。什麼是一個很好的oracle表達呢?
ABC-DEF => ABC
SUBSTR('ABC-DEF', 1, INSTR('ABC-DEF', '-')-1)
我只想用SUBSTR得到一切直到破折號:
select substr(str, 1, instr(str, '-')-1) new_str
from
(
select 'ABC-DEF' str
from dual
)
要使用正則表達式做到這一點:
regexp_replace('ABC-DEF', '-.*')
select substr('hello-dolly', 1, instr('hello-dolly', '-')-1) from dual
SELECT REGEXP_REPLACE ('ABC-DEF','[ - ] ',NULL)FROM dual; SELECT'regexp_replace('ABC-DEF-GHI-JKL','[ - ]',NULL)FROM dual;
,或者使用了冷靜函數調用FIELD:
CREATE OR REPLACE FUNCTION field(i_string VARCHAR2
,i_delimiter VARCHAR2
,i_occurance NUMBER
,i_return_number NUMBER DEFAULT 0
,i_replace_delimiter VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
v_return_string VARCHAR2(32767);
n_start NUMBER := i_occurance;
v_delimiter VARCHAR2(1);
n_return_number NUMBER := i_return_number;
n_max_delimiters NUMBER := regexp_count(i_string, i_delimiter);
BEGIN
IF i_return_number > n_max_delimiters THEN
n_return_number := n_max_delimiters + 1;
END IF;
FOR a IN 1 .. n_return_number LOOP
v_return_string := v_return_string || v_delimiter || regexp_substr(i_string, '[^' || i_delimiter || ']+', 1, n_start);
n_start := n_start + 1;
v_delimiter := nvl(i_replace_delimiter, i_delimiter);
END LOOP;
RETURN(v_return_string);
END field;
用法: SELECT場( '你好,多莉', ' - ',1,2)Entire_string ,現場( '你好,多莉', ' - ',1,1)First_part ,字段('Hello-Dolly',' - ',2,1)Second_part FROM dual;