可以写个函数方便些,我就不写了!DECLARE @S NVARCHAR(4000)='你啊12,34A33A',@S2 NVARCHAR(4000),@S1 NVARCHAR(4000)='',@N INT =1 SELECT @s2= SUBSTRING(@s,@N,1) WHILE @s2 <> '' BEGIN SET @N = @N + 1 IF @S2 LIKE '[0-9]' BEGIN SET @S1=@S1+@S2 END SELECT @s2=SUBSTRING(@s,@N,1) ENDSELECT @S1
你这段代码可用 但是应该如何创建一个function使得对这个表的所有记录执行这段代码呢
IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION DBO.GET_NUMBER2 GO CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[^0-9]%',@S) > 0 BEGIN set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'') END RETURN @S END GO --测试 PRINT DBO.GET_NUMBER('呵呵ABC123ABC') GO --123
--楼上的很简洁 Create function F_T (@s varchar(200)) returns varchar(200) as begin declare @str varchar(200),@i int set @i=1 set @str='' while @i<=len(@s) begin if substring(@s,@i,1)like '[0-9]' begin set @str=@str+substring(@s,@i,1) end set @i=@i+1 end return @str endselect dbo.F_T('A101吨A')
LZ 你的数据中有小数点吗? 如有的话,你把 4# 的方法简单的一改就可以了。 IF @S2 LIKE '[0-9]' -- 换成 IF @S2 LIKE '[0-9,.]'
create function [dbo].[Get_Number] (@S varchar(100)) returns int AS begin while PATINDEX('%[^0-9]%',@S)>0 begin set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'') end return cast(@S as int) endGO
SELECT @s2= SUBSTRING(@s,@N,1)
WHILE @s2 <> ''
BEGIN
SET @N = @N + 1
IF @S2 LIKE '[0-9]'
BEGIN
SET @S1=@S1+@S2
END
SELECT @s2=SUBSTRING(@s,@N,1)
ENDSELECT @S1
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
Create function F_T (@s varchar(200))
returns varchar(200)
as
begin
declare @str varchar(200),@i int
set @i=1
set @str=''
while @i<=len(@s)
begin
if substring(@s,@i,1)like '[0-9]'
begin
set @str=@str+substring(@s,@i,1)
end
set @i=@i+1
end
return @str
endselect dbo.F_T('A101吨A')
IF @S2 LIKE '[0-9]'
-- 换成
IF @S2 LIKE '[0-9,.]'
returns int
AS
begin
while PATINDEX('%[^0-9]%',@S)>0
begin
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
end
return cast(@S as int)
endGO