Я использую SQL Server 2008, поэтому функция FORMAT недоступна. Есть ли лаконичный способ удаления начальных и конечных нулей из десятичной дроби.

Другие ответы, которые я нашел при переполнении стека, не охватывают все сценарии.

Я хочу сделать что-то вроде этого:

DECLARE @d decimal(9,6) = 12.345
SELECT removezeros(@d)

Я понимаю, что результатом будет строка.

Он должен работать во всех следующих случаях:

0.123000    -> 0.123
1.23        -> 1.23
012.003450  -> 12.00345
1.00        -> 1
2
Graham 10 Мар 2014 в 15:03
Какие варианты вы нашли/пробовали?
 – 
Radu Gheorghiu
10 Мар 2014 в 15:08
1
Обязательно ли требуется начальный 0 в результате 0.123000?
 – 
Damien_The_Unbeliever
10 Мар 2014 в 15:08
2
Вы можете попробовать выполнить приведение к типу float, посмотрите на этот SQL Fiddle, там может быть проблемы с точностью, хотя, не уверен.
 – 
jpw
10 Мар 2014 в 15:09

3 ответа

Лучший ответ
create table #t(id decimal(9,6))
insert into #t values(0.123000),(012.3879000),(1.23),(1.00)

select cast(id as float) from #t

ДЕМО

2
Community 20 Июн 2020 в 12:12

Это ужасно, но, похоже, работает с числами и числами. Ключ сначала преобразуется в числовое, если ваше значение является плавающим.

declare @val numeric(18,5) = 012.003450;
SELECT ISNULL(REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(CAST(@val as nvarchar(max)),'0',' ')),' ','0'),'.',' ')),' ','.'),'');
  1. Приводить поплавки как числа
  2. Замени нули пробелами
  3. Правые места обрезки
  4. Вернуть пробелы обратно к нулям.
  5. Сделайте то же самое для десятичного разряда
0
Michael 5 Май 2016 в 09:58

Есть несколько способов сделать это, попробуйте это ниже.

USE AdventureWorks2012;
GO
SELECT TOP(5)CurrencyRateID, EndOfDayRate
            ,FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Number Format'
            ,FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format'
            ,FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;

Вот результат.

CurrencyRateID EndOfDayRate  Numeric Format  General Format  Currency Format
-------------- ------------  --------------  --------------  ---------------
1              1.0002        1.00            1.0002          $1.00
2              1.55          1.55            1.5500          $1.55
3              1.9419        1.94            1.9419          $1.94
4              1.4683        1.47            1.4683          $1.47
5              8.2784        8.28            8.2784          $8.28

(5 row(s) affected)

Его можно найти по следующей ссылке http://msdn.microsoft.com/en-us/library/hh213505.aspx

-1
Wesley Bland 10 Мар 2014 в 20:32
2
Прочтите еще раз первую строку вопроса: «Я использую SQL Server 2008, поэтому функция FORMAT недоступна».
 – 
jpw
10 Мар 2014 в 15:19