【SQLSERVER】如何找出字符串中的數字


可以通過寫自定義函數實現,以下提供兩種思路來解決:

1、通過正則匹配,找到字符串中的數字,一個一個拼起來

/*方法一: 一個一個找出來*/
CREATE FUNCTION [dbo].[Fun_GetNumPart] 
( @Str NVARCHAR(MAX) )
RETURNS NVARCHAR(MAX)
AS
    BEGIN
        DECLARE @Start INT;
        DECLARE @End INT; 
        DECLARE @Part NVARCHAR(MAX)
        SET @Start = PATINDEX('%[0-9]%', @Str);
        SET @End = PATINDEX('%[0-9]%',SUBSTRING(@Str, @Start+1,LEN(@Str) - @Start));
        SET @Part = SUBSTRING(@Str,@Start,1) 
        WHILE  @End >0 
        BEGIN 
                SET @Start = @start+@End
                SET @Part = @Part+SUBSTRING(@Str,@Start,1)       
                SET @End = PATINDEX('%[0-9]%',SUBSTRING(@Str, @Start+1,LEN(@Str) - @Start)); 
        END
            
        RETURN  @Part;
    END;

 

2、通過正則逆向匹配,找到字符串中的非數字,一個一個去掉

/*方法二:一個一個去掉*/
CREATE FUNCTION [dbo].[Fun_GetNumPart]  
( @Str NVARCHAR(MAX) ) 
RETURNS NVARCHAR(MAX)   
AS   
BEGIN   
    WHILE PATINDEX('%[^0-9]%',@Str)>0   
    BEGIN   
        SET @Str=STUFF(@Str,PATINDEX('%[^0-9]%',@Str),1,'') --刪掉非數字的字符
    END   
    RETURN @Str 
END   

效果如下圖:

延伸:

可以通過將函數中的 '%[0-9]%' 替換成 '%[A-Z]%'、'%[吖-做]%',,改造成找字母、找中文的函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM