近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过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.

