declare @a varchar(10),@result varchar(32)
set @a=''set @result=replace(newid(),'-','')while @result<>''
begin
  select @a=@a+left(@result,1) where isnumeric(left(@result,1))=1
  set @result=right(@result,len(@result)-1)
end
select @a

解决方案 »

  1.   

    select newid()会生成只有数字类型的值吗?
    楼主的意思到底是将这个id字段中值是数字的给提取出来,还是将值为:
    1BA34016-31A7-4915-95AA-CBABCB87119B
    中的数字给提取出来?
      

  2.   

    --把1BA34016-31A7-4915-95AA-CBABCB87119B中的除'-'外的部分提取出来。
    set @result=replace(newid(),'-','')--把提取出来的数字部分提取出来,ABC部分不要
    while @result<>''
    begin
      select @a=@a+left(@result,1) where isnumeric(left(@result,1))=1
      set @result=right(@result,len(@result)-1)
    end
      

  3.   

    1,建序数表
    select top 8000 identity(int,1,1) as N into numtab from 
    (select top 100 id=1  from sysobjects) as a,
    (select top 100 id=1  from sysobjects) as b,
    (select top 100 id=1  from sysobjects) as c2,declare @AllNum varchar(50)
    set @AllNum=''select @AllNum=@AllNum+substring(a.MyID,b.N,1) from 
    (select '1BA34016-31A7-4915-95AA-CBABCB87119B' as MyID) a
    left join numtab b
    on charindex(substring(a.MyID,b.N,1),MyID,b.N-1)=b.N
    where substring(a.MyID,b.N,1) like '[0-9]'print @AllNum
    将(select '1BA34016-31A7-4915-95AA-CBABCB87119B' as MyID)
    改成你的表名和字段名。