oracle的split函数截取怎么返回成一行数据

oracle的split函数截取怎么返回成一行数据,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12156938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存