Формат данных в формате SQL Server с запятыми

Как преобразовать десятичные значения в некоторые запятые?

это помогает мне. Но моя проблема в десятичных разрядах установлена только на 2. Я хочу, чтобы десятичная цифра была 2, 3 или 4.. пример

1,234.123   or    1,234.12345

Я пытался

convert(varchar, convert(decimal(18, 4), 1234.1234567), 1) 

Выход: 1234,1234

Нет запятой. Но если я использую деньги, то десятичное число равно 2

конвертировать (varchar, convert (деньги, 1234.1234567), 1)

Выход: 1,234,12

Ответ 1

не считая это хорошей идеей...

select dbo.F_AddThousandSeparators(convert(varchar, convert(decimal(18, 4), 1234.1234567), 1))

функция

-- Author:      bummi
-- Create date: 20121106
CREATE FUNCTION F_AddThousandSeparators(@NumStr varchar(50)) 
RETURNS Varchar(50)
AS
BEGIN
declare @OutStr varchar(50)
declare @i int
declare @run int

Select @i=CHARINDEX('.',@NumStr)
if @i=0 
    begin
    set @i=LEN(@NumStr)
    Set @Outstr=''
    end
else
    begin   
     Set @Outstr=SUBSTRING(@NUmStr,@i,50)
     Set @[email protected] -1
    end 


Set @run=0

While @i>0
    begin
      if @Run=3
        begin
          Set @Outstr=','[email protected]
          Set @run=0
        end
      Set @Outstr=SUBSTRING(@NumStr,@i,1) [email protected]  
      Set @[email protected]
      Set @[email protected] + 1     
    end

    RETURN @OutStr

END
GO

Ответ 2

К счастью (?), В SQL Server 2012+ вы можете использовать FORMAT() для достижения этого:

FORMAT(@s,'#,0.0000')


В предыдущих версиях, рискуя выглядеть настоящими уродливыми

[Запрос]:

declare @s decimal(18,10);
set @s = 1234.1234567;
select replace(convert(varchar,cast(floor(@s) as money),1),'.00',
    '.'+right(cast(@s * 10000 +10000.5 as int),4))

В первой части мы используем MONEY-> VARCHAR для создания запятых, но FLOOR() используется для обеспечения того, чтобы десятичные числа переходили в .00. Это легко идентифицировать и заменить на 4 цифры после десятичной точки, используя смесь смещения (*10000) и CAST как INT (усечение) для получения цифр.

[Результаты]:

|   COLUMN_0 |
--------------
| 1,234.1235 |

Но если вам не нужно доставлять бизнес-отчеты с помощью SQL Server Management Studio или SQLCMD, это НИКОГДА не будет правильным решением, даже если это можно сделать. Любая внешняя или отчетная среда имеет надлежащие функции для обработки форматирования отображения.

Ответ 4

Если вы используете службы отчетов SQL Azure, функция "format" не поддерживается. Это действительно единственный способ отформатировать всплывающую подсказку в диаграмме в SSRS. Поэтому обходным путем является возврат столбца с строковым представлением форматированного числа, которое будет использоваться для всплывающей подсказки. Итак, я согласен с тем, что SQL не является местом для форматирования. За исключением случаев, подобных этому, когда инструмент не имеет надлежащих функций для обработки форматирования отображения.

В моем случае мне нужно было отобразить число, отформатированное запятыми и без десятичных знаков (тип decimal 2), и в итоге получился этот драгоценный камень вычисленного столбца в моем запросе набора данных:

Fmt_DDS = reverse (материал (reverse (CONVERT (varchar (25), cast (SUM (kv.DeepDiveSavingsEst) в качестве денег), 1)), 1, 3, ''))

Он работает, но очень уродлив и неочевиден для тех, кто поддерживает отчет в будущем. Yay Cloud!

Ответ 5

SQL (или, точнее, RDBMS) не будет правильным выбором для форматирования вывода. База данных должна предоставлять необработанные данные, которые затем должны быть отформатированы (или более общие: обработаны) в целевом приложении.

Однако, в зависимости от конкретной системы, которую вы используете, вы можете написать UDF (пользовательская функция) для достижения того, что вы хотите. Но, пожалуйста, имейте в виду, что вы фактически возвращаете varchar, который вы не сможете обработать (например, суммировать).