拆分字符串函数

简介: 本函数可以将“目标字符串”以“指定字符串”进行拆分,并通过表结构返回结果。 在SQL Service中的代码如下: 1 CREATE FUNCTION [dbo].[fnSPLIT] 2 ( 3 @sInputString varchar(8000) 4 , ...

本函数可以将“目标字符串”以“指定字符串”进行拆分,并通过表结构返回结果。

在SQL Service中的代码如下:

 1 CREATE FUNCTION [dbo].[fnSPLIT]
 2 (
 3     @sInputString varchar(8000) 
 4     , @sSplitChar varchar(10)
 5 )RETURNS @tbl_List TABLE (SEQ INT IDENTITY(1,1),COD varchar(8000) )
 6 AS
 7 
 8 BEGIN
 9     DECLARE @lInputStringLength Int ,
10             @lPosition Int ,
11             @lSplitChar Int 
12 
13     SET @lInputStringLength = LEN ( @sInputString )
14     SET @lPosition=1
15     SET @lSplitChar=1
16 
17     WHILE @lPosition <= @lInputStringLength
18         BEGIN
19             SET @lSplitChar = CHARINDEX ( @sSplitChar , @sInputString , @lPosition)
20             IF @lSplitChar = 0
21                 BEGIN
22                     INSERT @tbl_List (COD )
23                     SELECT SUBSTRING( @sInputString , @lPosition ,1+ @lInputStringLength - @lPosition)
24                     SET @lPosition= @lInputStringLength + 1
25                 END
26             ELSE
27                 BEGIN
28                     INSERT @tbl_List ( COD )
29                     SELECT SUBSTRING( @sInputString , @lPosition , @lSplitChar - @lPosition)
30                     SET @lPosition = @lSplitChar+1
31         END
32     END
33     
34     DELETE @tbl_List WHERE RTRIM(COD)=''
35 
36     RETURN
37 END

返回结果:

SELECT * FROM dbo.fnSPLIT('我的未来不是梦,我的心跟着希望在动',',')

 

在Oracle中的代码如下:

 1 --在Type中的代码:
 2 CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
 3 
 4 --在Function中的代码:
 5 CREATE OR REPLACE FUNCTION fnSPLIT
 6 (
 7     P_InputString IN VARCHAR2, 
 8     P_Flag IN VARCHAR2
 9 )
10     RETURN str_split 
11     PIPELINED
12 AS
13     v_length   NUMBER := LENGTH(P_InputString);
14     v_start    NUMBER := 1;
15     v_index    NUMBER;
16 BEGIN
17     WHILE(v_start <= v_length)
18     LOOP
19         v_index := INSTR(P_InputString, P_Flag, v_start);
20 
21         IF v_index = 0
22         THEN
23             PIPE ROW(SUBSTR(P_InputString, v_start));
24             v_start := v_length + 1;
25         ELSE
26             PIPE ROW(SUBSTR(P_InputString, v_start, v_index - v_start));
27             v_start := v_index + 1;
28         END IF;
29     END LOOP;
30 
31     RETURN;
32 END fnSPLIT;

返回结果:

1 select * from (select rownum rn,t.* from table(fnSPLIT('我的未来不是梦,我的心跟着希望在动',',')) t)

将行转为列显示:

1 select a.column_value a,b.column_value b from 
2   (select * from (select rownum column_id,t.* from table(fnSPLIT('我的未来不是梦,我的心跟着希望在动',',')) t)) a,
3   (select * from (select rownum column_id,t.* from table(fnSPLIT('我的未来不是梦,我的心跟着希望在动',',')) t)) b
4 where a.column_id=1 and b.column_id=2

 

如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐]

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

感谢您的阅读,请关注我的后续博客

目录
相关文章
|
6月前
|
C语言 C++
C/C++字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数
C/C++字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数
25 0
|
2月前
|
存储 算法 前端开发
2788. 按分隔符拆分字符串
2788. 按分隔符拆分字符串
19 0
|
3月前
|
人工智能 BI
leetcod-561:数组拆分 I
leetcod-561:数组拆分 I
22 0
|
6月前
|
安全 C++
C/C++字符函数和字符串函数详解————长度受限制的字符串函数
C/C++字符函数和字符串函数详解————长度受限制的字符串函数
35 1
C/C++字符函数和字符串函数详解————长度受限制的字符串函数
【SQL开发实战技巧】系列(十):从拆分字符串、替换字符串以及统计字符串出现次数说起
本篇文章讲解的主要内容是:***遍历拆分字符串为单个字符、字符串中包含引号如何转译(q-quote特性)、计算字符在字符串中出现的次数、使用translate从字符串中快速删除替换不需要字符的巧妙写法、使用正则表达式regexp_replace将字符和数字数据分离、使用正则表达式regexp_like查询只包含数字或字母型的数据***
【SQL开发实战技巧】系列(十):从拆分字符串、替换字符串以及统计字符串出现次数说起
|
SQL Oracle 关系型数据库
SQL中按分隔符拆分字符串
SQL中按分隔符拆分字符串
|
人工智能 BI C++
数组拆分(C++)
你的任务是将这些数分成。
92 0
C#编程-88:正则表达式拆分
C#编程-88:正则表达式拆分
C#编程-88:正则表达式拆分
139.单词拆分
139.单词拆分
67 0
139.单词拆分
1593. 拆分字符串使唯一子字符串的数目最大
1593. 拆分字符串使唯一子字符串的数目最大
180 0