假設你的數據中都是數字後加一個漢字“頓”。
update tablename set 字段=substring(字段,1,len(字段)-1)
alter table tablename alter column 字段(decimal(13,2))

解决方案 »

  1.   

    可以写个函数方便些,我就不写了!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
      

  2.   

    你这段代码可用 但是应该如何创建一个function使得对这个表的所有记录执行这段代码呢
      

  3.   

    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
      

  4.   

    --楼上的很简洁
    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')
      

  5.   

    LZ  你的数据中有小数点吗?  如有的话,你把 4# 的方法简单的一改就可以了。 
    IF @S2 LIKE '[0-9]'
    -- 换成
    IF @S2 LIKE '[0-9,.]'
      

  6.   

    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