2013-02-25 53 views
0

删除不必要的零我想删除不必要的零显示该表SQL服务器 - 从表

Produit | Prix 
--------------- 
    A | 1000.65400 
    B | 1200.654000 
    C | 2540.6540000 
    D | 1000.25000 
    E | 224000.6540000000 

我想要得到这样的结果时:

Produit | Prix 
--------------- 
    A | 1000.654 
    B | 1200.654 
    C | 2540.654 
    D | 1000.25 
    E | 224000.654 

任何帮助将升值。 谢谢

+0

为什么你需要去3位小数? – 2013-02-25 17:17:46

+0

'Prix'是'VARCHAR'字段吗?如果是这样,为什么? – Dukeling 2013-02-25 17:21:09

+3

请不要要求SQL Server执行此操作 - 在表示层中对其所属的位置进行美化。 – 2013-02-25 17:21:38

回答

0

修剪开头和结尾不必要的0:

UPDATE yourTable 
SET Prix = CASE 
    WHEN Prix LIKE '%.%[1-9]%' THEN -- has a non-0 after the decimal point 
    REPLACE(RTRIM(LTRIM(REPLACE(Prix, '0', ' '))), ' ', '0') 
    WHEN Prix LIKE '%.%' THEN -- only 0's after the decimal point, remove point 
    REPLACE(REPLACE(RTRIM(LTRIM(REPLACE(Prix, '0', ' '))), ' ', '0'), '.', '') 
    ELSE -- has no decimal point, only trim leading 0's 
    REPLACE(LTRIM(REPLACE(Prix, '0', ' ')), ' ', '0') 
    END 

如果只想修剪尾随:

UPDATE yourTable 
SET Prix = CASE 
    WHEN Prix LIKE '%.%[1-9]%' THEN -- has a non-0 after the decimal point 
    REPLACE(RTRIM(LTRIM(REPLACE(Prix, '0', ' '))), ' ', '0') 
    ELSE -- only 0's after the decimal point, remove point 
    REPLACE(REPLACE(RTRIM(LTRIM(REPLACE(Prix, '0', ' '))), ' ', '0'), '.', '') 
    END 
WHERE Prix LIKE '%.%' -- make sure it's decimal 

以上全部更换0 s的空间,使用内置的修剪功能修剪空格,然后再用0 s替换空格。

+0

UPDATE yourTable SET大奖赛= CASE WHEN大奖赛LIKE '%。%' THEN REPLACE(RTRIM( LTRIM(REPLACE(Prix,'0',''))),'','0') ELSE - 没有小数点,只修整前导0的 REPLACE(LTRIM(REPLACE(Prix,'0',' ')),'','0') END此解决方案正常工作,但它会生成一个错误,如果我们有23651.0000 - 它给 - > 23651,而不是23651 – user1805523 2013-02-26 08:10:48

+1

@ user1805523编辑。现在应该工作。 – Dukeling 2013-02-26 08:36:57

+0

谢谢soooo多 – user1805523 2013-02-26 12:33:25