SQL Server - удалить ненужные нули из таблицы

Я хочу удалить ненужные нули при отображении этой таблицы

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
nl ja de
Зачем вам нужно перейти на 3 знака после запятой?
добавлено автор Paul Alan Taylor, источник
Пожалуйста, не запрашивайте SQL Server, чтобы выполнить это - выполните свое предупреждение, когда оно принадлежит, в уровне презентации.
добавлено автор Aaron Bertrand, источник
Поле Prix a VARCHAR ? Если да, то почему?
добавлено автор Dukeling, источник
Да Приз является варчаром (30)
добавлено автор user1805523, источник
из этого поля varchar я хочу удалить все ненужные нули после точки (.)
добавлено автор user1805523, источник

1 ответы

Обрезки ведущих и конечных ненужных 0's:

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 .

0
добавлено
@ user1805523 Отредактировано. Должен работать сейчас.
добавлено автор Dukeling, источник
UPDATE yourTable SET Prix = CASE КОГДА Prix LIKE '%.%' THEN REPLACE (RTRIM (LTRIM (REPLACE (Prix, '0', ''))), '', '0') ELSE - не имеет десятичной точки, только для того, чтобы переместить 0-й REPLACE (LTRIM (REPLACE (Prix, '0', '')), '', '0') END это решение работает правильно, за исключением того, что оно генерирует ошибку, если у нас есть 23651.0000 --it give -> 23651. вместо 23651
добавлено автор user1805523, источник
Большое спасибо
добавлено автор user1805523, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)