SQL根据指定分隔符分解字符串实现步骤
分解字符串在MS SQL中的实现方法详解
设想你有一个字符串,比如"sun,star,moon,clouds",你希望根据给定的分隔符(在这个例子中是逗号",")来分解这个字符串,将其分解成多个元素。在MS SQL中如何实现这一功能呢?为此,我们可以创建一个函数。
让我们创建一个名为Split_StrByDelimiter的函数,它可以根据指定的分隔符将字符串分解为各个元素。函数的代码如下:
```sql
CREATE FUNCTION [dbo].[Split_StrByDelimiter]
(
@String VARCHAR(8000),
@Delimiter CHAR(1)
)
RETURNS @temptable TABLE (items VARCHAR(8000)) AS
BEGIN
DECLARE @idx INT
DECLARE @slice VARCHAR(8000)
SELECT @idx = 1
IF LEN(@String)<1 OR @String IS NULL RETURN
WHILE @idx!= 0
BEGIN
SET @idx = CHARINDEX(@Delimiter,@String)
IF @idx!=0
SET @slice = LEFT(@String,@idx - 1)
ELSE
SET @slice = @String
IF(LEN(@slice)>0)
INSERT INTO @temptable(Items) VALUES(@slice)
SET @String = RIGHT(@String,LEN(@String) - @idx)
IF LEN(@String) = 0 BREAK
END
RETURN
END
```
这个函数的使用示例如下:如果你输入`SELECT FROM dbo.Split_StrByDelimiter('sun,star,moon,clouds',',')`,结果将返回分解后的各个元素:[sun]、[star]、[moon]、[clouds]。
接下来,如果你想知道这个字符串被分解成了多少个元素,我们可以稍作修改,创建一个名为GetCount_Split_StrByDelimiter的函数,它返回分解后的元素数量。函数的代码如下:
```sql
CREATE FUNCTION [dbo].[GetCount_Split_StrByDelimiter]
(
@String VARCHAR(8000),
@Delimiter CHAR(1)
)
RETURNS INT AS
BEGIN
DECLARE @temptable TABLE (items VARCHAR(8000))
DECLARE @SplitCount INT
DECLARE @idx INT
DECLARE @slice VARCHAR(8000)
SELECT @idx = 1
IF LEN(@String)<1 OR @String IS NULL RETURN 0
WHILE @idx!= 0
BEGIN
SET @idx = CHARINDEX(@Delimiter,@String)
IF @idx!=0
SET @slice = LEFT(@String,@idx - 1)
ELSE
SET @slice = @String
IF(LEN(@slice)>0)
INSERT INTO @temptable(Items) VALUES(@slice)
SET @String = RIGHT(@String,LEN(@String) - @idx)
IF LEN(@String) = 0 BREAK
END
SET @SplitCount=(SELECT COUNT() FROM @temptable)
RETURN @SplitCount
END
```
这个函数的使用示例是:`SELECT dbo.GetCount_Split_StrByDelimiter('sun,star,moon,clouds',',')`,结果将返回分解后的元素数量:4。
编程语言
- SQL根据指定分隔符分解字符串实现步骤
- 比较实用的正则表达式学习笔记
- React-Router如何进行页面权限管理的方法
- mysql exists与not exists实例详解
- AngularJS实现单独作用域内的数据操作
- 如何解决easyui自定义标签 datagrid edit combobox 手动
- php array_walk_recursive 使用自定的函数处理数组中的
- Angular中ng-options下拉数据默认值的设定方法
- php 二维数组快速排序算法的实现代码
- PHP PDOStatement--columnCount讲解
- vue如何获取点击事件源的方法
- smarty模板中使用get、post、request、cookies、session变
- 关于不同页面之间实现参数传递的几种方式讨论
- ThinkPHP3.1.3版本新特性概述
- thinkphp 验证码 的使用小结
- JS长整型精度问题实例分析