如何在Sql Server中自定义函数

分类:编程技术 时间:2024-02-20 15:30 浏览:0 评论:0
0
今天和大家聊聊如何在Sql Server中自定义函数。很多人可能对此还不是很了解。为了让大家更好的了解,小编为大家总结了以下内容。希望您能从本文中有所收获。

1.判断字段值是否为中文

--SQL 判断字段值是否为中文 create function fun_getCN( @str nvarchar(4000)) returns nvarchar(4000) as begin 声明 @word nchar(1),@CN nvarchar(4000) set @CN='' while len(@str)>0 begin set @word=left(@ str,1) if unicode(@ word) 19968 到 19968+20901 之间 set @CN=@CN+@word set @str=right(@str,len(@str)-1) end return @CN end select dbo.fun_getCN ('ASDKG Forum KDL')- -forum select dbo.fun_getCN('ASDKG Forum KDL')--forum select dbo.fun_getCN('ASDKDL')--空

2.提取数字

IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULLDROP FUNCTION DBO.GET_NUMBER2GOCREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^0-9] %',@S) > 0BEGINset @s=stuff(@s,patindex('%[^ 0-9]%',@s),1,'')ENDRETURN @SENDGO--测试 PRINT DBO.GET_NUMBER('哈哈 ABC123ABC')GO--123

3.提取英文

--提取英文 IF OBJECT_ID('DBO .GET_STR') IS NOT NULLDROP FUNCTION DBO.GET_STRGOCREATE FUNCTION DBO.GET_STR(@S VARCHAR( 100))返回 VARCHAR(100)ASBEGINWHILE PATINDEX('%[^a-z]%',@S) > 0BEGINset @s=stuff( @s,patindex('%[^a-z]%',@s),1, '')ENDRETURN @SENDGO--测试 PRINT DBO.GET_STR('呵呵ABC123ABC')GO

4.提取中文

--提取中文 IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULLDROP FUNCTION DBO.CHINA_STRGOCREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^吖-seat] ]%',@S) > 0SET @S = STUFF( @S,PATINDEX('%[^吖-座位]%',@S),1,N'')RETURN @SENDGOPRINT DBO.CHINA_STR('HeheABC123ABC' )GO

五、过滤重复cate字段(多种方法)

--过滤重复字符 IF OBJECT_ID('DBO.DISTINCT_STR') IS NOT NULLDROP FUNCTION DBO.DISTINCT_STRGOCREATE FUNCTION DBO.DISTINCT_STR (@S NVARCHAR(100)、@SPLIT VARCHAR(50))返回 VARCHAR(100)ASBEGINIF @S IS NULL RETURN(NULL)声明 @NEW VARCHAR(50)、@INDEX INT、@TEMP VARCHAR(50) IF LEFT( @S,1)<>@SPLITSET @S = @SPLIT+@SIF RIGHT(@S,1)<>@SPLITSET @S = @S+@SPLITWHILE CHARINDEX(@SPLIT,@S)>0 AND LEN( @S) <>1BEGINSET@INDEX = CHARINDEX(@SPLIT,@S)SET @TEMP = LEFT(@S,CHARINDEX(@SPLIT,@S,@INDEX+LEN(@SPLIT)))IF @NEW IS NULLSET @NEW = ISNULL (@NEW,'')+@TEMPELSESET @NEW = ISNULL(@NEW,'')+REPLACE(@TEMP,@SPLIT,'')+@SPLITWHILE CHARINDEX(@TEMP,@S)>0BEGINSET @S=STUFF (@S ,CHARINDEX(@TEMP,@S)+LEN(@SPLIT),CHARINDEX(@SPLIT,@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT))-CHARINDEX(@TEMP,@S ),' ')ENDENDRETURN RIGHT(LEFT(@NEW,LEN(@NEW)-1),LEN(LEFT(@NEW,LEN(@NEW)-1))-1)ENDGOPRINT DBO.DISTINCT_STR('A,A ,B,C,C,B,C,',',')--A,B,CGO -------------------------- ----------------------------------------过滤重复字符 2IF OBJECT_ID('DBO.DISTINCT_STR2') IS NOT NULLDROP 函数 DBO.DISTINCT_STR2GOCREATE 函数 DBO.DISTINCT_STR2(@S varchar(8000))RETURNS VARCHAR(100)ASBEGINIF @S IS NULL RETURN(NULL)DECLARE @NEW VARCHAR(50)、@INDEX INT、@TEMP VARCHAR(50)WHILE LEN(@S)>0BEGINSET @NEW=ISNULL(@NEW,'')+LEFT(@S,1)SET @S=REPLACE(@S,LEFT(@S,1),'')ENDRETURN @NEWENDGOSELECT DBO .DISTINCT_STR2('AABCCD')--ABCDGO

6.根据具体字符串分割字段值

IF OBJECT_ID('DBO.SPLIT_STR') IS NOT NULLDROP FUNCTION DBO.SPLIT_STRGOCREATE FUNCTION DBO.SPLIT_STR(@ S varchar(8000), --包含多个数据项的字符串 @INDEX int, --要获取的数据项的位置 @SPLIT varchar(10) --数据分隔符) RETURNS VARCHAR(100)ASBEGINIF @S IS NULL RETURN(NULL)DECLARE @SPLITLEN intSELECT @SPLITLEN= LEN(@SPLIT+'A')-2WHILE @INDEX>1 AND CHARINDEX(@SPLIT,@S+@SPLIT)>0SELECT @INDEX=@INDEX-1,@S=STUFF(@S,1,CHARINDEX(@SPLIT,@S+@SPLIT)+@SPLITLEN,'')RETURN(ISNULL(LEFT(@S,CHARINDEX(@SPLIT,@S+@SPLIT)-1),'') )ENDGOPRINT DBO.SPLIT_STR('AA|BB|CC',2,'|')--GO

看完以上内容,您是否对如何在Sql Server中自定义函数?如果您想了解更多知识或相关内容,请关注行业资讯频道。感谢您的支持。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在Sql Server中自定义函数

用户评论