我有一张表currency
:
Dollar
------
10
100
1000
120.20
O / P
Dollar
--------
Ten dollar
Hundred dollar
One Thousand dollar
One Hundred Twenty dollar and Twenty cents
答案 0 :(得分:2)
我编写的SQL# SQLCLR库的免费版本中有一个函数 Util_ToWords ,这样做(好吧,没有“美元”和“美分”) “添加的单词):
SELECT SQL#.Util_ToWords(10); -- Ten
SELECT SQL#.Util_ToWords(100); -- One Hundred
SELECT SQL#.Util_ToWords(1000); -- One Thousand
SELECT SQL#.Util_ToWords(120.20); -- One Hundred Twenty and 20
SELECT SQL#.Util_ToWords(212); -- Two Hundred Twelve
SELECT SQL#.Util_ToWords(123097.4);-- One Hundred Twenty Three Thousand, Ninety Seven and 40
以下示例将“dollar(s)”和“cents”字注入返回值(最初用于在支票上打印):
DECLARE @Amount MONEY = 2.08;
;WITH cte AS
(
SELECT N' dollar' + CASE WHEN @Amount >= 1.00 AND @Amount < 2.00 THEN N''
ELSE N's'
END AS [Currency],
SQL#.Util_ToWords(@Amount) AS [Words]
)
SELECT CASE CHARINDEX(N' and ', cte.[Words])
WHEN 0 THEN cte.[Words] + cte.[Currency]
ELSE STUFF(cte.[Words], CHARINDEX(N' and ', cte.[Words]), 0, cte.[Currency])
+ N' cents'
END
FROM cte;
返回:
Two dollars and 08 cents
答案 1 :(得分:0)
没有内置语法。您必须在应用程序上执行此操作或创建函数。然后转换后的金额将存储到SQL数据库。
答案 2 :(得分:0)
首先创建一个函数
Create FUNCTION [dbo].[OneToNinetynine] (
@num int) RETURNS VARCHAR(50)
AS BEGIN
DECLARE @word VARCHAR(50)
set @word=''
if @num =1 set @word='One'
else if @num =2 set @word='Two'
else if @num = 3 set @word='Three'
else if @num = 4 set @word='Four'
else if @num = 5 set @word='Five'
else if @num = 6 set @word='Six'
else if @num = 7 set @word='Seven'
else if @num = 8 set @word='Eight'
else if @num = 9 set @word='Nine'
else if @num = 10 set @word='Ten'
else if @num = 11 set @word='Eleven'
else if @num = 12 set @word='Twelve'
else if @num = 13 set @word='Thirteen'
else if @num = 14 set @word='Forteen'
else if @num = 15 set @word='Fifteen'
else if @num = 16 set @word='Sixteen'
else if @num = 17 set @word='Seventeen'
else if @num = 18 set @word='Eighteen'
else if @num = 19 set @word='Nineteen'
else if @num = 20 set @word='Twenty'
else if @num = 21 set @word='Twenty One '
else if @num = 22 set @word='Twenty Two'
else if @num = 23 set @word='Twenty Three'
else if @num = 24 set @word='Twenty Four'
else if @num = 25 set @word='Twenty Five'
else if @num = 26 set @word='Twenty Six'
else if @num = 27 set @word='Twenty Seven'
else if @num = 28 set @word='Twenty Eight'
else if @num = 29 set @word='Twenty Nine'
else if @num = 30 set @word='Thirty'
else if @num = 31 set @word='Thirty One '
else if @num = 32 set @word='Thirty Two'
else if @num = 33 set @word='Thirty Three'
else if @num = 34 set @word='Thirty Four'
else if @num = 35 set @word='Thirty Five'
else if @num = 36 set @word='Thirty Six'
else if @num = 37 set @word='Thirty Seven'
else if @num = 38 set @word='Thirty Eight'
else if @num = 39 set @word='Thirty Nine'
else if @num = 40 set @word='Forty'
else if @num = 41 set @word='Forty One'
else if @num = 42 set @word='Forty Two'
else if @num = 43 set @word='Forty Three'
else if @num = 44 set @word='Forty Four'
else if @num = 45 set @word='Forty Five'
else if @num = 46 set @word='Forty Six'
else if @num = 47 set @word='Forty Seven'
else if @num = 48 set @word='Forty Eight'
else if @num = 49 set @word='Forty Nine'
else if @num = 50 set @word='Fifty'
else if @num = 51 set @word='Fifty One'
else if @num = 52 set @word='Fifty Two'
else if @num = 53 set @word='Fifty Three'
else if @num = 54 set @word='Fifty Four'
else if @num = 55 set @word='Fifty Five'
else if @num = 56 set @word='Fifty Six'
else if @num = 57 set @word='Fifty Seven'
else if @num = 58 set @word='Fifty Eight'
else if @num = 59 set @word='Fifty Nine'
else if @num = 60 set @word='Sixty'
else if @num = 61 set @word='Sixty One'
else if @num = 62 set @word='Sixty Two'
else if @num = 63 set @word='Sixty Three'
else if @num = 64 set @word='Sixty Four'
else if @num = 65 set @word='Sixty Five'
else if @num = 66 set @word='Sixty Six'
else if @num = 67 set @word='Sixty Seven'
else if @num = 68 set @word='Sixty Eight'
else if @num = 69 set @word='Sixty Nine'
else if @num = 70 set @word='Seventy'
else if @num = 71 set @word='Seventy One '
else if @num = 72 set @word='Seventy Two'
else if @num = 73 set @word='Seventy Three'
else if @num = 74 set @word='Seventy Four'
else if @num = 75 set @word='Seventy Five'
else if @num = 76 set @word='Seventy Six'
然后使用此功能
Create FUNCTION [dbo].[NumberToWord] (
@num numeric(16,2)
) RETURNS VARCHAR(200)
AS BEGIN
DECLARE @word VARCHAR(200)
DECLARE @Dollar VARCHAR(200)
DECLARE @Cent VARCHAR(200)
DECLARE @main int
DECLARE @Frac numeric(12,2)
DECLARE @i int
set @word =''
set @Dollar =''
set @Cent=''
IF(@num<1000000000)
BEGIN
set @main = convert(int,@num)
set @Frac = (@num - @main )*100
IF (@main>9999999)
Begin
set @Dollar=@Dollar+dbo.OneToNinetynine(@main/10000000)+'Crore '
set @main= @main % 10000000
End
IF (@main>99999)
Begin
set @Dollar=@Dollar+dbo.OneToNinetynine(@main/100000)+'Lac '
set @main= @main % 100000
End
IF (@main>999)
Begin
set @Dollar=@Dollar+dbo.OneToNinetynine(@main/1000)+'Thousand '
set @main= @main % 1000
End
IF (@main>99)
Begin
set @Dollar=@Dollar+dbo.OneToNinetynine(@main/100)+'Hundred '
set @main= @main % 100
End
IF (@main>0)
Begin
set @Dollar=@Dollar+dbo.OneToNinetynine(@main)
End
IF (@Frac>0)
Begin
set @Cent=dbo.OneToNinetynine(@Frac)
End
set @word = @Dollar
if @Dollar <> '' set @word = @word + 'Dollar'
if (@Dollar <> '' and @Cent <> '') set @word =@word + ' And '
if @Cent <> '' set @word =@word + @Cent + 'Paisa'
set @word ='Tk-'+ @word + ' Only'
END
RETURN (@word)
END
然后调用第二个函数 选择dbo.NumberToWord(24450999.89)