Формат данных в формате 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, это НИКОГДА не будет правильным решением, даже если это можно сделать. Любая внешняя или отчетная среда имеет надлежащие функции для обработки форматирования отображения.
Ответ 3
Из связанного вопроса SO: форматируйте число с запятыми, но без десятичных знаков в SQL Server 2008 R2?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
Это было протестировано в SQL Server 2008 R2.
Ответ 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, который вы не сможете обработать (например, суммировать).