在SQL中,怎样将一个字符串里面的非数字删掉,谢谢!

时间:2021-04-24 20:38:19
如果是普通的程序,我会考虑用正则。但是SQL里面我不知道如何用。
还有,我本来想写个函数,遍历字符串中的每一个字符,后来发现isnumeric函数对字符“¢”不起作用。
所以想咨询下!

8 个解决方案

#1



declare @s varchar(30)
set @s='ga121512fsfa@!%^'

while patindex('%[^0-9]%',@s)>0
begin
select @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
end  

select @s

121512

(1 行受影响)

#2


自己切割便利不可以吗

#3


declare @t varchar(20)
set @t='12244@@&*'
select @s=stuff(@s,chindex('%[^0-9]%',@s),1,'')

#4



DECLARE @string nvarchar(200)
SET @string = N'一串乱78糟包含数字123也包含字母abc还包含特殊字符$¥¢的字符串,再试试半角数字456和全角数字789的区别。'
--方法1 BEGIN
WHILE @string COLLATE Chinese_PRC_BIN LIKE '%[^0-9]%' 
SET @string = STUFF(@string,PATINDEX('%[^0-9]%',@string COLLATE Chinese_PRC_BIN),1,'')
--方法1 END
SELECT @string
GO
DECLARE @string nvarchar(200)
SET @string = N'一串乱78糟包含数字123也包含字母abc还包含特殊字符$¥¢的字符串,再试试半角数字456和全角数字789的区别。'
--方法2 BEGIN
DECLARE @i int
SET @i = 1
WHILE @i <= LEN(@string)
BEGIN
IF UNICODE(SUBSTRING(@string,@i,1)) NOT BETWEEN 0x30 AND 0x39
SET @string = STUFF(@string,@i,1,'')
ELSE
SET @i = @i + 1
END
--方法2 END
SELECT @string
GO

#5


declare @t varchar(20)
set @t='1244@@&*'
select @t=stuff(@t,chindex('%[^0-9]%',@t)1,'')

#6


引用 5 楼 lzd_83 的回复:
SQL code
declare @t varchar(20)
set @t='1244@@&amp;*'
select @t=stuff(@t,chindex('%[^0-9]%',@t)1,'')


chindex 写错了 而且 charindex 也不可以跟通配符的

#7


lzd_83,按照你说的返回null

declare @t varchar(20)
set @t='1244@@&*'
select stuff(@t,charindex('%[^0-9]%',@t),1,'')

#8


学习了

#1



declare @s varchar(30)
set @s='ga121512fsfa@!%^'

while patindex('%[^0-9]%',@s)>0
begin
select @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
end  

select @s

121512

(1 行受影响)

#2


自己切割便利不可以吗

#3


declare @t varchar(20)
set @t='12244@@&*'
select @s=stuff(@s,chindex('%[^0-9]%',@s),1,'')

#4



DECLARE @string nvarchar(200)
SET @string = N'一串乱78糟包含数字123也包含字母abc还包含特殊字符$¥¢的字符串,再试试半角数字456和全角数字789的区别。'
--方法1 BEGIN
WHILE @string COLLATE Chinese_PRC_BIN LIKE '%[^0-9]%' 
SET @string = STUFF(@string,PATINDEX('%[^0-9]%',@string COLLATE Chinese_PRC_BIN),1,'')
--方法1 END
SELECT @string
GO
DECLARE @string nvarchar(200)
SET @string = N'一串乱78糟包含数字123也包含字母abc还包含特殊字符$¥¢的字符串,再试试半角数字456和全角数字789的区别。'
--方法2 BEGIN
DECLARE @i int
SET @i = 1
WHILE @i <= LEN(@string)
BEGIN
IF UNICODE(SUBSTRING(@string,@i,1)) NOT BETWEEN 0x30 AND 0x39
SET @string = STUFF(@string,@i,1,'')
ELSE
SET @i = @i + 1
END
--方法2 END
SELECT @string
GO

#5


declare @t varchar(20)
set @t='1244@@&*'
select @t=stuff(@t,chindex('%[^0-9]%',@t)1,'')

#6


引用 5 楼 lzd_83 的回复:
SQL code
declare @t varchar(20)
set @t='1244@@&amp;*'
select @t=stuff(@t,chindex('%[^0-9]%',@t)1,'')


chindex 写错了 而且 charindex 也不可以跟通配符的

#7


lzd_83,按照你说的返回null

declare @t varchar(20)
set @t='1244@@&*'
select stuff(@t,charindex('%[^0-9]%',@t),1,'')

#8


学习了