create or replace function split_string(p_expression IN VARCHAR2 ,p_split_flag IN VARCHAR2,p_length IN INTEGER,p_start_point IN INTEGER,p_number IN INTEGER)
RETURN VARCHAR2 IS
v_result VARCHAR2(200);
v_length INTEGER;
v_start_point INTEGER;
v_number INTEGER;
v_temp varchar2(200);
t_num INTEGER;
/******************************************************************************
根据设定的分界符,截取字符串中出现的第几个分界符后指定长度的字符串内容
输入参数:
p_expression varchar2 被截取的字符串、
p_split_flag varchar2 分界符、
p_length INTEGER 截取的字符串长度、
p_start_point INTEGER 开始位置
p_number INTEGER 从开始位置开始出现的第几个分界符
返回结果:
v_result varchar2 返回结果,截取出字符串
注意点:
1、被截取的字符串不能为空
2、分解符可以为空格
3、截取长度和第几个分解符需要给出值,默认为1
4、开始位置默认为空
--------------------------------------------------------------------------------
Version 1.0
Created By Pracy.Chen 2011-11-02
Mail:pracy87@163.com
*******************************************************************************/
BEGIN
t_num :=0;
v_length :=0;
v_start_point :=0;
v_number :=0;
--处理参数
IF trim(p_expression) is null THEN
v_result:='';
RETURN v_result;
END IF;
IF p_length is null OR p_length = 0 THEN
v_length:= 1;
ELSE
v_length:=p_length;
END IF;
IF p_number is null OR p_number = 0 THEN
v_number:= 1;
ELSE
v_number:=p_number;
END IF;
IF p_split_flag = p_expression OR p_split_flag is null THEN
v_result:= p_expression;
RETURN v_result;
END IF;
IF p_start_point is null THEN
v_start_point:= 1;
ELSE
v_start_point:=p_start_point;
END IF;
select instr(p_expression,p_split_flag,v_start_point,v_number) into t_num from dual;
IF t_num = 0 THEN
v_result := '';
RETURN v_result;
END IF;
select substr(p_expression,t_num+1,v_length) into v_temp from dual;
IF trim(v_temp)is null THEN
v_result:=' ';
ELSE
v_result:=v_temp;
END IF;
RETURN v_result;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN ' ';
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
return ' ';
END split_string;
/
分享到:
相关推荐
`instr()` 是Oracle中的一个内建函数,它用于查找子串在目标字符串中的位置。例如,`instr(string, substring)` 返回`substring`在`string`中第一次出现的位置。虽然这不是直接的字符串分割函数,但可以配合其他...
本文将详细介绍如何在 Oracle 中实现字符串分隔功能,并通过创建一个自定义的函数来实现这一目标。 #### 二、需求背景 假设我们有一个包含逗号分隔的字符串列表,需要将其拆分为单独的字符串值以便进一步处理。...
自定义函数`FUNCTION_SF_SPLIT_STRING`如上所示,是一个典型的用于分割字符串的函数,它接受两个参数:待分割的字符串`STRING`和用作分隔符的子字符串`SUBSTRING`,返回一个`VARCHAR2`类型的数组,其中包含了分割后...
在Oracle中,字符串分隔通常涉及到将一个长字符串按照特定的分隔符切割成多个子字符串。Oracle提供了多种函数来实现这一功能,例如`INSTR`、`SUBSTR`和`REGEXP_SUBSTR`等。下面我们将以`INSTR`和`SUBSTR`函数为例,...
这段描述进一步明确了具体的目标:使用PL/SQL编写一个函数,该函数能够接受一个原始字符串和一个分隔符作为输入参数,然后按照指定的分隔符将原始字符串分割成多个子字符串。这通常涉及到对字符串进行扫描、定位分隔...
- **处理边界情况**:如果找不到更多的分隔符,则默认将`@location`设置为字符串的长度加1,以便正确截取出最后一个子字符串。 - **返回子字符串**:利用`SUBSTRING`函数根据`@start`和`@location`的值截取第n个子...
- `DECODE`函数用于判断当前是否为字符串的开头(即第一个元素),如果是,则从位置`c`开始截取整个剩余部分;如果不是,则从位置`c`开始截取到位置`b`。 4. **最终结果**:返回的是一个包含所有分割后子串的结果...
首先,我们先创建一个用于分割字符串的函数`fn_split`,它接收两个参数:待处理的字符串`p_str`和作为分隔符的字符串`p_delimiter`,并返回一个类型为`ty_str_split`的表。 ```sql CREATE OR REPLACE FUNCTION fn_...
这就需要用到字符串处理函数,如SQL Server中的`STRING_SPLIT`,MySQL中的`SUBSTRING_INDEX`或`FIND_IN_SET`,或者Oracle中的`INSTR`和`SUBSTR`等。 在存储过程的调试方面,不同数据库系统提供了不同的工具和方法。...
SQL 字符串分割函数实现多行数据转换 ...通过这个示例,我们可以看到,使用 `StringSplit` 函数可以轻松地将一个字段中的特殊字符分割的字符串转换成多行数据。这个函数可以广泛应用于各种数据库应用场景中。
- `SPLIT_STRING(input_string, delimiter, index)`: 按照分隔符将字符串拆分为多个部分,返回指定索引的子字符串。 9. **位操作函数** - `BITAND(a, b)`: 对a和b执行按位与操作。 - `BITOR(a, b)`: 对a和b执行...
这个函数`split`接收两个参数:`p_string`是要分割的字符串,`p_sep`是分割字符串的分隔符,默认值为逗号。在函数内部,使用`INSTR`函数找到分隔符的位置,并使用`SUBSTR`函数提取子字符串。`PIPE ROW`语句将提取的...
- Oracle的`RANK`, `DENSE_RANK`和`ROW_NUMBER`在SQL Server中也存在,但Oracle的`LISTAGG`函数用于字符串合并,SQL Server需要使用`FOR XML PATH`或`STRING_AGG`(SQL Server 2017及以上版本)。 5. **事务控制**...
Oracle 数据库是一个强大的关系型数据库管理系统,它提供了丰富的内置函数,便于用户进行数据处理和操作。以下是一些在 Oracle 数据库中常用的字符串处理函数的详细解释: 1. **AddSlashes()**: 这个函数用于在字符...
以下是一个详细的SQL字符串截取教程,特别关注如何在遇到分隔符时进行操作。 首先,我们声明一个变量`@str`并赋值为包含分隔符(在这个例子中是逗号)的字符串:`'462,464,2'`。这个字符串由三个整数组成,用逗号...
这是一个更高级的查询,通常由DBA使用。 3. **查询会话权限:** - `select * from session_privs;` - 显示当前会话的权限信息。这可以帮助我们了解当前连接到数据库的会话具有哪些权限。 4. **查询系统权限:** ...
例如,给定一个由逗号分隔的字符串 `'123,zhonggou,mama,'`,要求将其拆分为独立的字段,并且最后一个字段后面保留一个逗号。 #### 3. 使用 PL/SQL 实现字符串分割 - **方法一**:使用自定义类型 `TYPE_SPLIT` 和...
**命令:** `select text from all_source where owner = user and name = 'SF_SPLIT_STRING';` 此命令用于查看特定函数的源代码,对于开发和调试非常重要。 #### 二十七、查看表中的列 **命令:** `select column_...