求教这样的自定义函数怎么写?SQL SERVER2000表里有这样一个字段:
统计局*0001*A*张一
统计局*0002*B*张二
建设局*0001*A*李一
建设局*0002*B*李二写一个函数,提取出第一个*之前的数据,以及第一个*与第二个*之间的数据,即生成下面这样的数据:
统计局 0001
统计局 0002
建设局 0001
建设局 0002
统计局*0001*A*张一
统计局*0002*B*张二
建设局*0001*A*李一
建设局*0002*B*李二写一个函数,提取出第一个*之前的数据,以及第一个*与第二个*之间的数据,即生成下面这样的数据:
统计局 0001
统计局 0002
建设局 0001
建设局 0002
解决方案 »
- 乐观锁理论上个人觉得没什么用,请大家进来反对我
- 求在SQL中查询及删除多字段重复记录的方法?
- 为什么USE master语法通过,而USE 111就不行??
- 本地ACESS实时同步到服务器SQL SERVER2000中
- 如何获得SQLSERVER所有数据库的空间实际使用、未使用以及总的大小
- 一般大家在新建字段落时是否允许null?
- 请问 Haiwer(海阔天空) 进 急 看见就请留言
- 5500元特价转让笔记本电脑??!!
- sqlserver装成window验证模式,如何写数据库连接文件?在线等待
- 高分求救!如何建立一个存储过程能检测一个数据库中所有表中的字段是否为空值及合法性?
- 如何写这样的SQL语句?
- 自定义函数遇到的问题
统计局1111*000551*A*张一
统计局22*00052*B*张二
建设局333333333333*00055555551*A*李一
建设局2*005502*B*李二
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([col] [nvarchar](20))
INSERT INTO [tb]
SELECT '统计局*0001*A*张一' UNION ALL
SELECT '统计局*0002*B*张二' UNION ALL
SELECT '建设局*0001*A*李一' UNION ALL
SELECT '建设局*0002*B*李二'--SELECT * FROM [tb]-->SQL查询如下:
IF OBJECT_ID('dbo.f_getstr')>0
DROP FUNCTION dbo.f_getstr
GO
--分段截取函数(邹建)
CREATE FUNCTION dbo.f_GetStr(
@s varchar(8000), --包含多个数据项的字符串
@pos int, --要获取的数据项的位置
@split varchar(10) --数据分隔符
)RETURNS varchar(100)
AS
BEGIN
IF @s IS NULL RETURN(NULL)
DECLARE @splitlen int
SELECT @splitlen=LEN(@split+'a')-2
WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
SELECT @pos=@pos-1,
@s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'')
RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
END
GOSELECT dbo.f_GetStr(col,1,'*') col1,dbo.f_GetStr(col,2,'*') col2 FROM tb
/*
col1 col2
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
统计局 0001
统计局 0002
建设局 0001
建设局 0002(4 行受影响)
*/
dbo.f_GetStr(col,1,'*')----
col里可能同时有*和*,如果这两种星号都同时存在,f_GetStr函数无法得到正确的结果