zoukankan      html  css  js  c++  java
  • SqlServer获取字符串中数字,中文及字符部分数据

    --获取英文字符数据
    Create function [dbo].[Fun_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('2.5mg')--调用函数=mg
    --获取数值数据
    Create FUNCTION [dbo].[Fun_GetNum] 
    ( @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;
    --select dbo.[Fun_GetNumPart]('2.5mg')--调用函数=2.5
    --获取中文数据
    create function [dbo].[Fun_getCN]
    (@str varchar(4000)) 
    returns varchar(4000) 
    as 
    begin 
    declare @word nchar(1),@CN varchar(4000) 
    set @CN='' 
    while len(@str)>0 
    begin 
    set @word=left(@str,1) 
    if unicode(@word) between 19968 and 40869 
    set @CN=@CN+@word 
    set @str=right(@str,len(@str)-1) 
    end 
    return @CN 
    end 
    GO 
    --select dbo.fun_getCN('2.5mg,毫克')--毫克
  • 相关阅读:
    php数据缓存到文件类设计
    php静态文件缓存示例
    php array_merge和“+”的区别和使用《细说php2》
    kafka环境安装及简单使用(单机版)
    Protobuf的上手使用
    Java8新特性概览
    Mock测试框架(Mockito为例)
    Java序列化与反序列化
    系统/项目环境搭建
    关于Tomcat服务器中的协议及请求过程
  • 原文地址:https://www.cnblogs.com/studypanp/p/10186027.html
Copyright © 2011-2022 走看看