还有,我本来想写个函数,遍历字符串中的每一个字符,后来发现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
chindex 写错了 而且 charindex 也不可以跟通配符的
#7
lzd_83,按照你说的返回null
declare @t varchar(20)
set @t='1244@@&*'
select stuff(@t,charindex('%[^0-9]%',@t),1,'')
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
chindex 写错了 而且 charindex 也不可以跟通配符的
#7
lzd_83,按照你说的返回null
declare @t varchar(20)
set @t='1244@@&*'
select stuff(@t,charindex('%[^0-9]%',@t),1,'')
declare @t varchar(20)
set @t='1244@@&*'
select stuff(@t,charindex('%[^0-9]%',@t),1,'')
#8
学习了