none
换个方法思考,用PATINDEX去掉数字最后无用的0今天在网上看到这么一个帖子: RRS feed

  • 问题

  • 换个方法思考,用PATINDEX去掉数字最后无用的0今天在网上看到这么一个帖子:
    数据有
      id   value1
        01   12.231
        02   12.000
        03   78.200
        04   45.230
    现在需要得到如下的结果
      id   value1
        01   12.231
        02   12
        03   78.2
        04   45.23
    就是把后面没有用的0都省略,应该怎么处理!!
    2007年8月6日 6:04

答案

  • 第一个反映就是循环去掉,但是这样效率不高而且一个语句无法完成,有什么好办法呢?忽然想到PATINDEX函数:返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。可以利用它来找右边连续的0,找到就去掉,这样不就OK了吗,最后给出语句如下:--建立测试数据
    declare @tmp table
    (
    st decimal(5,3)
    )

    insert into @tmp
    select 12.231
    union
    select 12.000
    union
    select 78.200
    union
    select 45.230
    --返回结果
    select case when PATINDEX('%000',cast(st as varchar(6)))>0 then cast(cast(st
    as int ) as varchar(6))
    when PATINDEX('%00',cast(st as varchar(6)))>0
    and PATINDEX('%000',cast(st as varchar(6)))=0 then cast(cast(st as
    decimal(3,1)) as varchar(6))
    when PATINDEX('%0',cast(st as varchar(6)))>0
    and PATINDEX('%00',cast(st as varchar(6)))=0 then cast(cast(st as
    decimal(4,2)) as varchar(6))
    else cast(st as varchar(6))
    end
    from @tmp
    2007年8月6日 6:06