全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3348
推到 Plurk!
推到 Facebook!

請問SQL語法,關於取字串中的字串

答題得分者是:Jasonwong
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-26 19:34:11 IP:210.65.xxx.xxx 訂閱

大家好

想請教各位大大一個SQL的指令(ORACLE DB)

我的字串是4個_組成的,例如xxxx_xxxx_xxx_xxxx

如果只有一個_我還可以用instr去找出隔開的2個字串,

現在我想分別抓出這4個被_隔開的字串(他們沒有字數上的規則),

請教有沒有什麼別的指令或方法呢?

謝謝大家囉m(^.^)m

Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-26 21:15:37 IP:61.57.xxx.xxx 未訂閱

使用 TStringList 即可輕鬆解決你的問題

procedure TForm1.Button1Click(Sender: TObject);
var
List: TStringList;
begin
List:= TStringList.Create;
try
List.Delimiter:= '_';
List.DelimitedText:= 'xxxx_xxxx_xxx_xxxx';
//-*---
ShowMessage(List.Strings[0]); // 第一個字串, 底下以此類推
ShowMessage(List.Strings[1]);
ShowMessage(List.Strings[2]);
ShowMessage(List.Strings[3]);
finally
FreeAndNil(List);
end;
end;

------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-27 16:56:46 IP:210.65.xxx.xxx 未訂閱

插一下花!

也可以在 Oracle 先增加一個 Custom Function
CREATE OR REPLACE FUNCTION TEST_FUNCTION3
(P_IN_STR IN VARCHAR2,
P_SEARCH_STR IN VARCHAR2,
P_SEQ IN NUMBER)
RETURN VARCHAR2 IS
V_SEQ1 NUMBER;
V_SEQ2 NUMBER;
RESULT VARCHAR2(100);
BEGIN
BEGIN
IF P_SEQ = 1 THEN
V_SEQ1 := 0;
ELSE
V_SEQ1 := INSTR(P_IN_STR,P_SEARCH_STR,1,P_SEQ - 1);
END IF;
V_SEQ2 := INSTR(P_IN_STR,P_SEARCH_STR,1,P_SEQ);
IF V_SEQ2 = 0 THEN
IF V_SEQ1 = 0 THEN
RESULT := NULL;
ELSE
RESULT := SUBSTR(P_IN_STR,V_SEQ1 1,LENGTH(P_IN_STR) - V_SEQ1);
END IF;
ELSE
RESULT := SUBSTR(P_IN_STR,V_SEQ1 1,V_SEQ2 - V_SEQ1 - 1);
END IF;
EXCEPTION
WHEN OTHERS THEN
RESULT := NULL;
END;
RETURN(RESULT);
END TEST_FUNCTION3;

然後在 SQL Command 中呼叫即可
SELECT TEST_FUNCTION3(YOURFIELD,'_',1) F1,
TEST_FUNCTION3(YOURFIELD,'_',2) F2,
TEST_FUNCTION3(YOURFIELD,'_',3) F3,
TEST_FUNCTION3(YOURFIELD,'_',4) F4
FROM YOURTABLE

PS:如果不寫 Function 也可以,只是 SQL Command 會相當冗長不易讀取,一樣是套用 Instr 與 Substr 這兩個 Function,再搭配 Decode 即可!

Fishman

------
Fishman
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-07-28 16:30:21 IP:220.130.xxx.xxx 未訂閱

直接下 left 或 right 就可以了吧

------
======================
昏睡~
不昏睡~
不由昏睡~
系統時間:2024-05-10 6:25:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!