字符函数PATINDEX()与STUFF()

 函数 PATINDEX() STUFF() 取数字 英语 汉字

更多:http://msdn.microsoft.com/zh-cn/library/ms188395.aspx

PATINDEX()

返回模式在指定表达式中第一次出现的起始位置;如果在所有有效的文本和字符数据类型中都找不到该模式,则返回零。

语法:PATINDEX ( '%pattern%' , expression )

STUFF()

STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。

语法 : STUFF ( character_expression , start , length , replaceWith_expression )

取数字

--创建
CREATE FUNCTION dbo.f_GetNumber(@StringWithNumber VARCHAR(100))
RETURNS VARCHAR(100)
AS 
    BEGIN        
        WHILE PATINDEX('%[^0-9]%', @StringWithNumber) > 0 
            BEGIN 
                SET @StringWithNumber = STUFF(@StringWithNumber,PATINDEX('%[^0-9]%',@StringWithNumber), 1,'');
            END
        RETURN @StringWithNumber
    END
--测试,执行function的时候,dbo. 千万不能掉了  
SELECT  dbo.f_GetNumber('asdf464568asdf')

取字母

--创建    
CREATE FUNCTION dbo.Get_String ( @String VARCHAR(100) )
RETURNS VARCHAR(100)
AS 
    BEGIN
        WHILE PATINDEX('%[^a-z$]%', @String) > 0 
            BEGIN 
                SET @String = STUFF(@String, PATINDEX('%[^a-z]%', @String), 1,'') ;
            END 
        RETURN @String
    END

--测试
SELECT  dbo.Get_String('asdf464568asdf')

--取出中文

--取出中文 
IF OBJECT_ID('dbo.GetChineseFromString') IS NOT NULL 
    DROP FUNCTION dbo.GetChineseFromString 
GO 
CREATE FUNCTION dbo.GetChineseFromString ( @StringWithChinese NVARCHAR(100) )
RETURNS NVARCHAR(100)
AS 
    BEGIN 
        WHILE PATINDEX('%[^吖-座]%', @StringWithChinese) > 0 
            SET @StringWithChinese = STUFF(@StringWithChinese, PATINDEX('%[^吖-座]%', @StringWithChinese), 1, N''); 
        RETURN @StringWithChinese 
    END
go 
SELECT dbo.GetChineseFromString('asda54615哈哈笑死我了asdfsadf56564!!!')

 

posted on 2013-12-16 16:36  Aidou_dream  阅读(444)  评论(0编辑  收藏  举报

导航