(转)在SQL中取出字符串中数字部分或在SQL中取出字符部分

近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索。并结合自己项目的需求,编写了一个自定义的SQL函数用供项目中使用。

/****** Object:  UserDefinedFunction [dbo].[F_Get_No]    Script Date: 10/18/2013 22:03:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


create  function [dbo].[F_Get_No] 
( 
@No varchar(100) 
) 
RETURNS bigint 
AS 
BEGIN 
WHILE PATINDEX('%[^0-9]%',@No)>0 
BEGIN 
SET @No=STUFF(@No,PATINDEX('%[^0-9]%',@No),1,'') --删掉一个非数字的字符,循环结束,剩余的为数字部分
END 
RETURN CONVERT(bigint,@No) 
END
View Code

项目中的问题解决后,反过来思考了一下如果只取出字串中的字符部分,又如何处理呢。经过修改,修改如下,生成另一个SQL自定义函数。

create  function [dbo].[F_GetChar]

(

@No varchar(100)

)

RETURNS varchar(100)

AS

BEGIN

WHILE PATINDEX('%[^A-Za-z]%',@No)>0

BEGIN

SET @No=STUFF(@No,PATINDEX('%[^A-Za-z]%',@No),1,'') --删掉一个非数字的字符,循环结束,剩余的为数字部分

END

RETURN CONVERT(varchar(100),@No)

END

 

--select dbo.F_GetChar('wwww23')
View Code

以上调用自定义函数时都必须前面带dbo.

posted @ 2013-12-11 14:39  海上浪子  阅读(1863)  评论(0编辑  收藏  举报