informix 11.5(含)版本以前沒有提供charindex功能.
因為想要依傳入的尋找 字元組合來取得符合的position,所以為了方便,自已寫了一個湊合著用
以下function是區分大小寫尋找的..
--DOP FUNCTION uf_charindex;
/*
in_str:被搜尋的字元
in_delimiter;尋找字元
in_occurence:被找到的次數
in_exact:是否依in_delimiter逐字尋找
*/
CREATE FUNCTION uf_charindex
(in_str VARCHAR(255),in_delimiter VARCHAR(255)
,in_occurence INTEGER, in_exact CHAR(1) )
RETURNING INTEGER ;
DEFINE q_pos INTEGER;
DEFINE i INTEGER;
DEFINE q_len INTEGER;
DEFINE q_time INTEGER;
DEFINE j INTEGER;
DEFINE q_len_del INTEGER;
DEFINE q_found CHAR(1);
DEFINE q_str VARCHAR(255);
DEFINE q_step INTEGER;
IF nvl(in_occurence,1) <=1 THEN
LET in_occurence = 1;
END IF;
LET q_time=0;
LET i = 1;
LET q_pos = 0;
LET j = 1;
LET q_found = '0';
LET q_step = 1;
LET q_len = char_length(in_str);
LET q_len_del = char_length(in_delimiter);
--是否依in_delimiter逐字尋找符合字
IF in_exact = '1' THEN --完全符合
LET q_step = q_len_del;--先記下完整字長度
LET q_len_del = 1; --最外層只跑一次即可
END IF ;
FOR j = 1 TO q_len_del STEP 1
LET i = 1;
LET q_time = 0;
LET q_pos = 0;
LET q_found = '0';
--取比較字(若in_exact='1'則全部符合)
IF in_exact = '1' THEN
LET q_str = in_delimiter;
ELSE --否則逐字找直到找到in_occurence為止
LET q_str = substr(in_delimiter,j,1);
END IF;
FOR i = 1 TO q_len STEP 1
IF substr(in_str,i,q_step) = q_str THEN
LET q_pos = i;
LET q_time = q_time +1;
--找到後若與指定出現次數相符則結束
IF q_time = in_occurence THEN
LET q_found = '1';
EXIT FOR;
END IF;
END IF;
END FOR;
IF q_found = '1' THEN
EXIT FOR;
END iF;
END FOR;
RETURN q_pos;
END FUNCTION;
測試一下
SELECT FIRST 1 uf_charindex("臺東縣臺東市","縣市",1,'0') FROM systables;
傳回3
SELECT FIRST 1 uf_charindex("臺北市信義區","縣市",1,'0') FROM systables;
傳回3
SELECT FIRST 1 uf_charindex("臺東縣臺東市","市縣",1,'0') FROM systables;
傳回6
SELECT FIRST 1 uf_charindex("This is a book","book",1,'1') FROM systables;
傳回11
SELECT FIRST 1 uf_charindex("This are a lot of bOOks","O",2,'1') FROM systables;
傳回21
訂閱:
張貼留言 (Atom)
publish error allowDefinition='MachineToApplication'
一個老舊的aspx web form專案,調了一些功能建置成功,但進行部署時顯示以下錯誤。 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段發生錯誤。錯誤的原因可能是虛擬目錄尚未在 IIS 中設定為...
-
上網找了免費的白箱檢測工具,找到了 puma scan 因為支援OWASP TOP 10的檢測,所以這是一個符合客戶需求又能與Visual studio結合的工具(白話說...交差了事矣....) 更重要的是這不用錢....檢測工具都貴森森的,尤其是源碼檢測工具。 ht...
-
在一台windows 2016的主機上,某一天,用遠端登入後,出現了以下的訊息.... 遠端工作階段中斷,因為沒有提供授權的遠端桌面授權伺服器可以使用。請連伺服器系統管理員。 這啥啊........... 想不到,在MOBILE01找到了解決...........哈哈...
-
SQL Server 2005 後,提供EXCEP 和INTERSECT, 功能和ORACLE的MINUS, INTERSECT相同 EXCEP 找出存在於第一個子集,但不存在於第二個子集的筆數 INTERSECT 找出皆存在於二個子集中的筆數 這二個方法很方便查找有多...
沒有留言:
張貼留言