【叶子函数分享三十六】SQL2000/2005字符串拆分为列表通用函数
来源:互联网 发布:win7打开sql服务 编辑:程序博客网 时间:2024/05/17 05:14
-- 原帖地址:http://blog.csdn.net/htl258/archive/2010/04/28/5537235.aspx
------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-28 02:00:28
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:38
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
-- Subject: SQL2000/2005字符串拆分为列表通用函数
-------------------------------------------------------------------
--SQL2000/2005字符串拆分为列表通用函数
IF OBJECT_ID('f_getstr') IS NOT NULL
DROP FUNCTION f_getstr
GO
CREATE FUNCTION f_getstr(
@s NVARCHAR(4000), --待分拆的字符串
@flag NVARCHAR(10)='' --数据分隔符
)RETURNS @r TABLE(col NVARCHAR(1000))
AS
BEGIN
IF ISNULL(@flag,'')='' AND LEN(ISNULL(@flag,'')+'a')=1
INSERT @r
SELECT SUBSTRING(@s,number+1,1)
FROM master..spt_values
WHERE TYPE='p' and number<LEN(@s+'a')-1
ELSE
INSERT @r
SELECT SUBSTRING(@s,number,CHARINDEX(@flag,@s+@flag,number)-number)
FROM master..spt_values
WHERE TYPE='p' and number<=len(@s+'a')
--AND SUBSTRING(@flag+@s,number,1)=@flag --用此条件或下面的条件均可
AND CHARINDEX(@flag,@flag+@s,number)=number
RETURN
END
GO
--本实例技巧,利用master库自带的spt_values表,取number字段作为连续的序号,
--省去创建序号表,尽量做到通用,再加上字符串处理函数取得最终结果。
--1.每个字符拆分取出
SELECT * FROM dbo.f_getstr(N'一个世界一个家',NULL)
SELECT * FROM dbo.f_getstr(N'一个世界一个家','')
SELECT * FROM dbo.f_getstr(N'一个世界一个家',default)
/*
col
-------
一
个
世
界
一
个
家
(7 行受影响)
*/
--2.指定分隔符拆分取出
SELECT * FROM dbo.f_getstr(N'一个世界一个家',N' ')
SELECT * FROM dbo.f_getstr(N'一个,世界,一个,家',N',')
SELECT * FROM dbo.f_getstr(N'一个%世界%一个%家',N'%')
SELECT * FROM dbo.f_getstr(N'一个中国世界中国一个中国家',N'中国')
/*
col
---------
一个
世界
一个
家
(4 行受影响)
*/
--3.SQL2005以上版本可以结合apply进行拆分列值
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb (id INT,col VARCHAR(30))
INSERT INTO tb VALUES(1,'aa,bb')
INSERT INTO tb VALUES(2,'aaa,bbb,ccc')
GO
SELECT id,b.col FROM tb CROSS APPLY f_getstr(col,',') b
SELECT id,b.col FROM tb OUTER APPLY f_getstr(col,',') b
/*
id col
----------- -----------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
(5 行受影响)
*/
--本文来自CSDN博客
--转载请标明出处:
--http://blog.csdn.net/htl258/archive/2010/04/28/5537235.aspx
- 【叶子函数分享三十六】SQL2000/2005字符串拆分为列表通用函数
- 【叶子函数分享三十六】SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- SQL2000/2005字符串拆分为列表通用函数
- 字符串拆分函数 sql2000
- 【叶子函数分享三十四】字符串转成16进制函数
- 【叶子函数分享三十七】求字符串中汉字的个数
- 【叶子函数分享七】生成n位随机字符串
- 【叶子函数分享十九】向左填充指定字符串
- 【叶子函数分享五十六】对字符串进行加密解密
- 【叶子函数分享七】生成n位随机字符串
- 我只为你而写
- Cisco路由器DHCP服务器基本配置
- 系统聚类
- 结构体中的占位符用法
- 黑马总结 : el自定函数的实现
- 【叶子函数分享三十六】SQL2000/2005字符串拆分为列表通用函数
- 禁用标题栏按钮
- 函数的得墨忒耳法则
- 《VTC出品汇编语言编程教程》(VTC Assembly Language Programming)[光盘镜像]
- 中国移动互联网网图
- 使用common-fileupload核心代码
- java实现插入排序
- 素数筛法系列之1 简单筛法实现
- 结识了JavaScript的内存泄露