实验:
-- 不可见字符
create table t1(str1 varchar(50));
go
insert into t1 values('5678')
go
insert into t1 values(char(0)+'5678')
go
insert into t1 values(char(0)+'5678'+char(0))
go
insert into t1 values('5678'+char(0))
select str1,len(str1),ascii(str1),-- 首字符ascii
replace(str1,char(0),''),len(replace(str1,char(0),'')),ascii(replace(str1,char(0),'')),
replace(str1,char(0),'1'),len(replace(str1,char(0),'1')),ascii(replace(str1,char(0),'1')),
substring(replace(str1,char(0),'1'),6,1),ascii(substring(replace(str1,char(0),'1'),6,1))
from t1;
结论:
1,空字符char(0)占用空间
2,,空字符不可见
3,replace替换空字符,如果在末位,将不会替换掉,并且使用ISNUMERIC(COLUMN)
>0的过滤条件也不起效
可以使用一个函数提取字符串中的数字
CREATE function [dbo].[fn_getnumber](@str varchar(100))
returns varchar(100)
begin
declare @return varchar(100) = ''
declare @temp varchar(2)
while LEN(@str) > 0
begin
set @temp = SUBSTRING(@str,1,1)
if @temp between '0' and '9'
select @return = @return + @temp
set @str = SUBSTRING(@str,2,len(@str))
end
return @return
end