oracle的split函数截取如何返回成一行数据
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
str_split ty_str_split := ty_str_split ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
str_splitEXTEND;
str_split (str_splitCOUNT) := str;
IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
str_splitEXTEND;
str_split (str_splitCOUNT) := str;
END IF;
END LOOP;
RETURN str_split;
END split;
/
1测试例子:
select from table (split('a,b,c,sdf',','));
1 a
2 b
3 c
4 sdf
用这个函数进行截取的时候 返回的是多条 如何才能让他返回成一行呢
a b c sdf
C/C++中的Split函数是strtok()其函数原型如下:
char strtok (char str, const char delimiters);
函数说明
strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值
返回下一个分割后的字符串指针,如果已无从分割则返回NULL。
示例-1
/ strtok example /
#include <stdioh>
#include <stringh>
int main ()
{
char str[] ="a,b,c,de";
const char split = ",";
char p;
p = strtok (str,split);
while(p!=NULL) {
printf ("%s\n",p);
p = strtok(NULL,split);
}
getchar();
return 0;
}
本例中,实现对字符串'a,b,c,de"用逗号(,)来作界定符对字符串进行分割。
输出结果将如下所示:
a
b
c
de
因为delimiters支持多个分割符, 我们将本示例中的语句行
const char split = ",";
改成 const char split = ","; //用逗号(,)和星号()对字符串进行分割
这样输出结果将如下所示:
a
b
c
d
e
VB使用Split函数实现分割多个以相同标识符组成的字字符串。
Split函数
描述,返回一个下标从零开始的一维数组,它包含指定数目的子字符串。
就是拆分字符串嘛用一个例子就知道了s=split("赵,钱,孙,李",",")s是个字符串数组,这样的话,s中就有四个元素s(0)是赵s(1)是钱s(2)是孙s(3)是李比自己一个个赋值快多了
mysql 5 的版本现在没有split 函数,以下是几个自定义的split函数,供大家参考。先设置:SET GLOBAL log_bin_trust_function_creators = 1;1 函数func_splitStringTotal:将字符串按指定方式分割,并计算单元总数
复制代码 代码如下:DELIMITER $$
CREATE FUNCTION `func_get_splitStringTotal`(
f_string varchar(10000),f_delimiter varchar(50)
) RETURNS int(11)BEGINreturn 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));END$$DELIMITER ;2函数func_splitString:将字符串按指定方式分割,获取指定位置的数
复制代码 代码如下:DELIMITER $$
DROP function IF EXISTS `func_splitString` $$
CREATE FUNCTION `func_splitString`
( f_string varchar(1000),f_delimiter varchar(5),f_order int)
RETURNS varchar(255) CHARSET utf8
BEGINdeclare result varchar(255) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
return result;END$$SELECT func_splitString('1,2,3,4,5,6,7',',',1);3过程splitString 将字符串分割,并放到临时表tmp_split 里面
复制代码 代码如下:DELIMITER $$
DROP PROCEDURE IF EXISTS `splitString` $$
CREATE PROCEDURE `splitString`
(IN f_string varchar(1000),IN f_delimiter varchar(5))BEGIN
declare cnt int default 0;
declare i int default 0;
set cnt = func_split_TotalLength(f_string,f_delimiter);
DROP TABLE IF EXISTS `tmp_split`;
create temporary table `tmp_split` (`val_` varchar(128) not null) DEFAULT CHARSET=utf8;while i < cntdoset i = i + 1;
Private Sub Command1_Click()
Dim myarray() '合成数组
Dim str1, str2, str3
str1 = "a,b,c#d,e,f#g,h,i#" '行分割#,列分割,有多少分割符就是多少数组
ReDim myarry(UBound(Split(str1, "#")) - 1, 0) '建立二维数组
For i = 0 To UBound(myarry, 1) '读取行数循环
str2 = Split(str1, "#") '分割行#
str3 = Split(str2(i), ",") '分割列,
ReDim Preserve myarry(UBound(myarry, 1), UBound(str3)) '改变数组二维长度 UBound(str3)
For X = 0 To UBound(myarry, 2) '读取列数循环
myarry(i, X) = str3(X)
Form1Print myarry(i, X)
Next
Form1Print
Next
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)