delimiter $$
drop
function
ifexists
`data_extract`$$
create
function
`data_extract`
(aimstring varchar
(100
)charset utf8, flag int
)returns
varchar(50
)charset utf8
begin
declare len int
default0;
declare tmp varchar
(100
)default'';
set len=char_length(aimstring)
;if flag =
0then
while len >0do
-- 使用mid對字串從後往前擷取,對每個元素進行正則匹配
-- regexp'[0-9]' 匹配數字
ifmid
(aimstring ,len,1)
regexp
'[0-9]'
then
set tmp=concat(tmp,
mid(aimstring ,len,1)
);endif
;set len = len -1;
endwhile
;elseif flag=
1then
while len >0do
-- 使用mid對字串從後往前擷取,對每個元素進行正則匹配
-- regexp '[a-za-z]') 匹配字母if(
mid(aimstring,len,1)
regexp
'[a-za-z]'
)then
set tmp=concat(tmp,
mid(aimstring,len,1)
);endif
;set len = len -1;
endwhile
;elseif flag=
2then
while len >0do
-- 使用mid對字串從後往前擷取,對每個元素進行正則匹配
-- 匹配數字+字母if(
(mid
(aimstring,len,1)
regexp
'[0-9]')or
(mid
(aimstring,len,1)
regexp
'[a-za-z]'))
then
set tmp=concat(tmp,
mid(aimstring,len,1)
);endif
;set len = len -1;
endwhile
;elseif flag=
3then
while len >0do
-- 使用mid對字串從後往前擷取,對每個元素進行正則匹配
-- [u0391-uffe5] :中文之外的字元,正則匹配不在這範圍內的則為中文
ifnot
(mid
(aimstring,len,1)
regexp
'^[u0391-uffe5]'
)then
set tmp=concat(tmp,
mid(aimstring,len,1)
);endif
;set len = len -1;
endwhile
;else
set tmp =
'error: the second paramter should be in (0,1,2,3)'
;return tmp;
endif
;return reverse(tmp)
;end$$
delimiter
;
mysql查詢呼叫:
select num_char_extract(欄位名,1) from table;
num_char_extract(欄位名,1)
(1) 第二個引數為0:代表提取數字
(2) 第二個引數為1:代表提取字母
(3) 第二個引數為2:代表提取數字+字母
(4) 第二個引數為3:代表提取漢字
(5) 第二個引數為其他數字:列印錯誤提示
字串提取
請從字串中提取以最後乙個 img 開頭 以最後乙個 img 結尾的字串,未找到匹配的字串返回 null 可能包含 img img 的字串擷取後的字串bbb img ccc img ddd img eee img img ddd img eee img abcnull先找出最後乙個 img 的 所在下...
字串提取
比如乙個字串 110,hello,119,world,120,computer 我想提取第3個逗號 之後 第4個逗號 之前 的那一段,即 world 如何用 實現 如下 define uart recv field lenth 512 define uint16 unsigned short uin...
strtok分割字串提取
char strtok char s,const char delim 分解字串為一組字串。s為要分解的字串,delim為分隔符字元 如果傳入字串,則傳入的字串中每個字元均為分割符 首次呼叫時,s指向要分解的字串,之後再次呼叫要把s設成null。strtok函式會破壞被分解字串的完整,呼叫前和呼叫後...