Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Gleb Oufimtsev -

Microsoft SQL Server - Строки

Все примеры / Строки

Функция для написания суммы прописью

Автор: Gleb Oufimtsev | добавлено: 15.05.2010, 09:54 | просмотров: 5415 (1+) | комментариев: 0 | рейтинг: *x6
В примере находится набор функций, позволяющих программно в SQL Server выводить суммы прописью. Например, число 1023. 99 вывести как: одна тысяча двадцать три рубля 99 копеек.

Код

/*************************************************************************/
/*         NumPhrase function for MSSQL2000           */
/*          Gleb Oufimtsev (dnkvpb@nm.ru)            */
/*            http://www.gvu.newmail.ru            */
/*             Moscow Russia 2001             */
/*************************************************************************/
CREATE function NumPhrase (@Num BIGINT, @IsMaleGender bit=1)
returns varchar(255)
as
begin
 declare @nword varchar(255), @th tinyint, @gr smallint, @d3 tinyint, @d2
tinyint, @d1 tinyint
 if @Num<0 return '*** Error: Negative value' else if @Num=0 return 'Ноль'
/* особый случай */
 while @Num>0
 begin
  set @th=IsNull(@th,0)+1  set @gr=@Num%1000  set @Num=(@Num-@gr)/1000
  if @gr>0
  begin
   set @d3=(@gr-@gr%100)/100
   set @d1=@gr%10
   set @d2=(@gr-@d3*100-@d1)/10
   if @d2=1 set @d1=10+@d1
   set @nword=case @d3
         when 1 then ' сто' when 2 then ' двести' when 3 then '
триста'
         when 4 then ' четыреста' when 5 then ' пятьсот' when 6
then ' шестьсот'
         when 7 then ' семьсот' when 8 then ' восемьсот' when 9
then ' девятьсот' else '' end
        +case @d2
         when 2 then ' двадцать' when 3 then ' тридцать' when 4
then ' сорок'
         when 5 then ' пятьдесят' when 6 then ' шестьдесят' when 7
then ' семьдесят'
         when 8 then ' восемьдесят' when 9 then ' девяносто' else
'' end
        +case @d1
         when 1 then (case when @th=2 or (@th=1 and
@IsMaleGender=0) then ' одна' else ' один' end)
         when 2 then (case when @th=2 or (@th=1 and
@IsMaleGender=0) then ' две' else ' два' end)
         when 3 then ' три' when 4 then ' четыре' when 5 then '
пять'
         when 6 then ' шесть' when 7 then ' семь' when 8 then '
восемь'
         when 9 then ' девять' when 10 then ' десять' when 11 then
' одиннадцать'
         when 12 then ' двенадцать' when 13 then ' тринадцать' when
14 then ' четырнадцать'
         when 15 then ' пятнадцать' when 16 then ' шестнадцать'
when 17 then ' семнадцать'
         when 18 then ' восемнадцать' when 19 then ' девятнадцать'
else '' end
        +case @th
         when 2 then ' тысяч'   +(case when @d1=1 then 'а' when
@d1 in (2,3,4) then 'и' else ''  end)
         when 3 then ' миллион' when 4 then ' миллиард' when 5 then
' триллион' when 6 then ' квадрилион' when 7 then ' квинтилион'
         else '' end
        +case when @th in (3,4,5,6,7) then (case when @d1=1 then ''
when @d1 in (2,3,4) then 'а' else 'ов' end) else '' end
        +IsNull(@nword,'')
  end
 end
 return upper(substring(@nword,2,1))+substring(@nword,3,len(@nword)-2)
end



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



/*************************************************************************/
/*         RubPhrase function for MSSQL2000           */
/*          Gleb Oufimtsev (dnkvpb@nm.ru)            */
/*            http://www.gvu.newmail.ru            */
/*             Moscow Russia 2001             */
/*************************************************************************/
CREATE function RubPhrase (@Value money)
returns varchar(255)
as
begin
 declare @rpart bigint, @rattr tinyint, @cpart tinyint, @cattr tinyint
 set @rpart=floor(@Value)   set @rattr=@rpart%100
 if @rattr>19 set @rattr=@rattr%10
 set @cpart=(@Value-@rpart)*100
 if @cpart>19 set @cattr=@cpart%10 else set @cattr=@cpart
 return dbo.NumPhrase(@rpart,1)+' рубл'
      +case when @rattr=1 then 'ь' when @rattr in (2,3,4) then 'я' else
'ей' end+' '
      +right('0'+cast(@cpart as varchar(2)),2)+' копе'
      +case when @cattr=1 then 'йка' when @cattr in (2,3,4) then 'йки'
else 'ек' end
end



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




/*************************************************************************/
/*         UsdPhrase function for MSSQL2000           */
/*          Gleb Oufimtsev (dnkvpb@nm.ru)            */
/*            http://www.gvu.newmail.ru            */
/*             Moscow Russia 2001             */
/*************************************************************************/
CREATE function UsdPhrase (@Value money)
returns varchar(255)
as
begin
 declare @dpart bigint, @dattr tinyint, @cpart tinyint, @cattr tinyint
 set @dpart=floor(@Value)   set @dattr=@dpart%100
 if @dattr>19 set @dattr=@dattr%10
 set @cpart=(@Value-@dpart)*100
 if @cpart>19 set @cattr=@cpart%10 else set @cattr=@cpart
 return dbo.NumPhrase(floor(@Value),1)+' доллар'
      +case when @dattr=1 then '' when @dattr in (2,3,4) then 'а' else
'ов' end
      +' США '+right('0'+cast(@cpart as varchar(2)),2)+' цент'
      +case when @cattr=1 then '' when @cattr in (2,3,4) then 'а' else
'ов' end
end
Об авторе

Gleb Oufimtsev

Нет информации об авторе...
Gleb Oufimtsev
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики