Я выполняю некоторые административные запросы и собираю результаты sp_spaceused
в SQL Server 2008, чтобы посмотреть на соотношение данных / индекса для некоторых таблиц в моей базе данных. Конечно, я получаю много разных результатов, и мои глаза начинают затуманиваться. Было бы очень удобно, если бы я мог отформатировать все эти числа запятыми (987654321 становится 987,654,321). Забавно, что за все те годы, когда я использовал SQL Server, эта проблема никогда не возникала, так как большую часть времени я занимался форматированием на уровне представления, но в этом случае результатом T-SQL в SSMS является представление.
Я решил просто создать простую ULF CLR, чтобы решить эту проблему, но кажется, что это должно быть выполнимо в простом старом T-SQL. Итак, я поставлю вопрос здесь - как вы делаете числовое форматирование в vanilla T-SQL?
источник
Ответы:
В SQL Server 2012 и выше, это будет форматировать число с запятыми:
Вы также можете изменить
0
количество знаков после запятой, которое вы хотите.источник
format
функции.culture
.Хотя я согласен со всеми, включая OP, который говорит, что форматирование должно выполняться на уровне представления, это форматирование может быть выполнено в T-SQL путем
money
преобразования и последующего преобразования вvarchar
. Это включает конечные десятичные дроби, которые могут быть зациклены сSUBSTRING
.источник
Я бы рекомендовал Replace вместо Substring, чтобы избежать проблем с длиной строки:
источник
Для реализаций SQL Server 2012+ у вас будет возможность использовать FORMAT для применения строкового форматирования к нестроковым типам данных.
В первоначальном вопросе пользователь запросил возможность использовать запятые в качестве разделителей тысяч. В закрытом и повторяющемся вопросе пользователь спросил, как можно применить форматирование валюты. Следующий запрос показывает, как выполнить обе задачи. Это также демонстрирует применение культуры, чтобы сделать это более универсальным решением (обращаясь к функции Циридиса Димитриса, чтобы применить греческое специальное форматирование)
SQLFiddle для вышеупомянутого
источник
String index out of range: 33
Демо 1
Демонстрирует добавление запятых:
Демо 2
Демонстрирует запятые и десятичные точки. Обратите внимание, что при необходимости округляется последняя цифра.
Совместимость
SQL Server 2012+
,источник
Пожалуйста, попробуйте следующий запрос:
Формат с правой десятичной точкой:
источник
FORMAT
функция , правильный путьSELECT format(123456789987654321,'###,##0')
, или, проще говоря,select format(123456789987654321, 'N0')
@ThomasMueller ответил.выход = 9 876 543
и вы можете заменить 9876543 вашим именем столбца.
источник
Попробовал трюк с деньгами выше, и это прекрасно работает для числовых значений с двумя или менее значащими цифрами. Я создал свою собственную функцию для форматирования чисел с десятичными знаками:
источник
Это относится к комментарию к ответу Фила Ханта , но, увы, у меня нет представителя.
Чтобы удалить ".00" из конца вашей числовой строки, parsename очень удобен. Он токенизирует строки, разделенные точкой, и возвращает указанный элемент, начиная с самого правого токена как элемента 1.
Выход "987,654,321"
источник
вот еще один т-sql UDF
источник
источник
Вот скалярная функция, которую я использую, которая исправляет некоторые ошибки в предыдущем примере (выше), а также обрабатывает десятичные значения (с указанным числом цифр) (EDITED, чтобы также работать с 0 и отрицательными числами). Еще одно замечание: метод приведения в качестве денег выше ограничен размером типа данных MONEY и не работает с 4 (или более) десятичными цифрами. Этот метод определенно проще, но менее гибок.
источник
Еще один UDF, который, как мы надеемся, достаточно универсален и не делает предположений о том, хотите ли вы округлить до определенного числа десятичных разрядов:
источник
- ====================================================== =================== -
/ * Эта функция нуждается в 3 аргументах: первый аргумент - это @Numero_str, который Number в качестве ввода данных, а два других аргумента указывают, как информация будет отформатирована для вывода, это аргументы @Pos_Enteros и @Pos_Decimales, которые указывают, сколько Целые и десятичные разряды, которые вы хотите показать для числа, которое вы передаете в качестве входного аргумента. * /
источник
Для SQL Server до 2012 года, который не включает функцию FORMAT, создайте эту функцию:
выберите dbo.FormatCurrency (12345678) возвращает $ 12 345 678,00
Бросьте $, если вы просто хотите запятые.
источник