--获取英文字符数据 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,毫克')--毫克