Это просто праздные мысли вслух начинающего ламера и только для таких же ламеров, у которых потом возможно будет меньше вопросов к корифеям...
Иногда, да и наверное достаточно часто, выходные данные прямых запросов требуются только для отображения полученной информации без дальнейшей её обработки. В этом случае в большинстве ситуаций наверное достаточно разумным будет переложить работу по форматированию выводимых числовых значений непосредственно на сам SQL-сервер.
Я уже задавал здесь вопрос как получить средствами языка T-SQL что-то подобное 1С-кому "Ч16.2'," :
http://www.1cpp.ru/forum/YaBB.pl?num=1168296603Ответ был просто идеально классический, но недостаточно универсальный:
REPLACE(REPLACE(convert(varchar(17), cast($ШапкаСчета.СуммаСТр as money), 1),',',' '),'.',',') As Сумма
Поэтому рискую предложить частично-универсальное решение в примерах получения аналога Формат() для числовых значений. На выходе, ессно, получаем строку...
В общем случае выражению Формат(Сумма,"ЧM.N") соответствует
Str(Сумма,M+1,N)
Пример: "Ч16.5" :
Select Str($Спр.spхх,17,5) as Сумма
Здесь $Спр.spхх - числовой реквизит справочника, 17 - это 16 разрядов+1 - символ разделителя дробной части.
Пример: "Ч010.5" :
Select Цена = Case When $Спр.spхх = 0 Then '' Else Str($Спр.spxx,11,5) End
Здесь для подавления вывода нулевых значений используем конструкцию case when else end
Для форматирования периодических числовых реквизитов немного усложним конструкцию за счет необходимой проверки на null:
Select КурсВалюты = Case When IsNull($Спр.spхх,0) = 0 Then '' Else Str($Спр.spxx,11,5) End
При желании заменить символ разделителя дробной части наверное можно воспользоваться функцией REPLACE. По поводу унификации работы с разделителем разрядов целой части ни одной мысли...
Применительно к табличному полю:
Запись в значения полей данных числовой колонки строковых значений позволит реализовать быстрый поиск по первым символам, что несомнено может оказаться полезным, например для быстрого поиска необходимой суммы. Однако, для реализации этой возможности необходимо сделать СокрЛ(Формат(Сумма,"Ч16.5") приблизительно так:
Select Ltrim(Str($Спр.spхх,17,5)) as Сумма
. Однако, если предполагается такую колонку сортировать, то Ltrim делать нельзя, иначе Вы будете удивлены полученным эффектом
. В общем случае, необходимо будет сделать выбор: или Вы эту колонку предположительно будете сортировать, тогда без Ltrim, или поиск по первым символам, что потребует Ltrim если Вам не нравится набирать впереди искомого значения недостающие пробелы.
Как для ламера с 2-хмесячным стажем знакомства с 1С++ и T-SQL любые критические замечания вплоть до "нафиг надо" и ценные идеи и дополнения охотно принимаются