近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过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
项目中的问题解决后,反过来思考了一下如果只取出字串中的字符部分,又如何处理呢。经过修改,修改如下,生成另一个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')
以上调用自定义函数时都必须前面带 dbo.