create
function
decodehundred(
@hundredstring
varchar
(
300
) )
returns
varchar
(
1000
)
as
begin
declare
@tmp
varchar
(
1000
),
@decodehundred
varchar
(
1000
)
set
@decodehundred
=
''
declare
@strno1
varchar
(
1000
)
select
@strno1
=
'
One Two Three Four Five
'
+
'
Six Seven Eight Nine Ten
'
+
'
Eleven Twelve Thirteen Fourteen Fifteen
'
+
'
Sixteen Seventeen Eighteen Nineteen
'
declare
@strtens1
varchar
(
1000
)
set
@strtens1
=
'
Ten Twenty Thirty Forty Fifty
'
+
'
Sixty Seventy Eighty Ninety
'
declare
@unit4
varchar
(
10
)
set
@unit4
=
'
Hundred
'
if
len
(
@hundredstring
)
>
0
and
len
(
@hundredstring
)
<=
3
begin
if
len
(
@hundredstring
)
=
1
begin
set
@tmp
=
cast
(
@hundredstring
as
int
)
if
@tmp
<>
0
set
@decodehundred
=
rtrim
(
substring
(
@strno1
,(
@tmp
-
1
)
*
10
+
1
,
10
))
end
if
len
(
@hundredstring
)
=
2
begin
set
@tmp
=
cast
(
@hundredstring
as
int
)
if
@tmp
<>
0
if
@tmp
<
20
if
@tmp
<
10
set
@decodehundred
=
'
Zero
'
+
rtrim
(
substring
(
@strno1
,(
@tmp
-
1
)
*
10
+
1
,
10
))
else
set
@decodehundred
=
rtrim
(
substring
(
@strno1
,(
@tmp
-
1
)
*
10
+
1
,
10
))
else
if
cast
(
right
(
@hundredstring
,
1
)
as
int
)
=
0
set
@decodehundred
=
rtrim
(
substring
(
@strtens1
,(
@tmp
/
10
-
1
)
*
10
+
1
,
10
))
else
set
@decodehundred
=
rtrim
(
substring
(
@strtens1
,(
@tmp
/
10
-
1
)
*
10
+
1
,
10
))
+
'
-
'
+
rtrim
(
substring
(
@strno1
,(
cast
(
right
(
@hundredstring
,
1
)
as
int
)
-
1
)
*
10
+
1
,
10
))
end
if
len
(
@hundredstring
)
=
3
begin
if
cast
(
left
(
@hundredstring
,
1
)
as
int
)
<>
0
set
@decodehundred
=
rtrim
(
substring
(
@strno1
,(
cast
(
left
(
@hundredstring
,
1
)
as
int
)
-
1
)
*
10
+
1
,
10
))
+
'
'
+
@unit4
+
'
'
+
dbo.decodehundred(
right
(
@hundredstring
,
2
))
else
set
@decodehundred
=
dbo.decodehundred(
right
(
@hundredstring
,
2
))
end
end
return
@decodehundred
end
go
create
function
f_numbertostring(
@number
as
numeric(
12
,
2
))
returns
varchar
(
1000
)
as
begin
declare
@str
varchar
(
100
),
@beforepoint
varchar
(
100
),
@afterpoint
varchar
(
100
),
@tmpstr
varchar
(
100
),
@numbertostring
varchar
(
200
)
declare
@point
int
,
@nnumlen
int
declare
@nbit
integer
declare
@curstring
varchar
(
100
)
set
@numbertostring
=
''
declare
@unit1
varchar
(
1000
)
set
@unit1
=
'
Thousand Million Billion Hundred Only Point * And
'
set
@str
=
cast
(
round
(
@number
,
2
)
as
varchar
)
if
charindex
(
'
.
'
,
@str
)
=
0
begin
set
@beforepoint
=
@str
set
@afterpoint
=
''
end
else
begin
begin
set
@beforepoint
=
left
(
@str
,
charindex
(
'
.
'
,
@str
)
-
1
)
set
@afterpoint
=
right
(
@str
,
len
(
@str
)
-
charindex
(
'
.
'
,
@str
))
end
if
len
(
@beforepoint
)
>
12
begin
set
@numbertostring
=
'
Too big.
'
return
@numbertostring
end
set
@str
=
''
while
len
(
@beforepoint
)
>
0
begin
set
@nnumlen
=
len
(
@beforepoint
)
if
@nnumlen
%
3
=
0
begin
set
@curstring
=
left
(
@beforepoint
,
3
)
set
@beforepoint
=
right
(
@beforepoint
,
@nnumlen
-
3
)
end
else
begin
set
@curstring
=
left
(
@beforepoint
, (
@nnumlen
%
3
))
set
@beforepoint
=
right
(
@beforepoint
,
@nnumlen
-
(
@nnumlen
%
3
))
end
set
@nbit
=
len
(
@beforepoint
)
/
3
set
@tmpstr
=
dbo.decodehundred(
@curstring
)
if
(
@beforepoint
=
REPLICATE
(
'
0
'
,
len
(
@beforepoint
))
or
@nbit
=
0
)
and
len
(
@curstring
)
=
3
if
cast
(
left
(
@curstring
,
1
)
as
int
)
<>
0
and
cast
(
right
(
@curstring
,
2
)
as
int
)
<>
0
set
@tmpstr
=
left
(
@tmpstr
,
charindex
(
'
Hundred
'
,
@tmpstr
)
+
len
(
'
Hundred
'
))
+
'
And
'
+
right
(
@tmpstr
,
len
(
@tmpstr
)
-
(
charindex
(
'
Hundred
'
,
@tmpstr
)
+
7
))
else
if
cast
(
left
(
@curstring
,
1
)
as
int
)
<>
0
and
cast
(
right
(
@curstring
,
2
)
as
int
)
=
0
set
@tmpstr
=
'
And
'
+
@tmpstr
if
@nbit
=
0
set
@str
=
ltrim
(
@str
+
'
'
+
@tmpstr
)
else
set
@str
=
ltrim
(
@str
+
'
'
+
@tmpstr
+
'
'
+
rtrim
(
substring
(
@unit1
,(
@nbit
-
1
)
*
10
+
1
,
10
)))
if
left
(
@str
,
3
)
=
'
And
'
set
@str
=
ltrim
(
right
(
@str
,
len
(
@str
)
-
3
))
if
@beforepoint
=
REPLICATE
(
'
0
'
,
len
(
@beforepoint
))
break
end
set
@beforepoint
=
replace
(
@str
,
'
*
'
,
'
'
)
if
len
(
@afterpoint
)
>
0
set
@afterpoint
=
'
Point
'
+
'
'
+
dbo.decodehundred(
@afterpoint
)
+
'
'
--
+ @unit7
else
set
@afterpoint
=
'
Only
'
set
@numbertostring
=
replace
(
@beforepoint
,
'
Zero
'
,
''
)
+
'
'
+
@afterpoint
end
set
@numbertostring
=
ltrim
(
rtrim
(
@numbertostring
))
if
right
(
@numbertostring
,
5
)
=
'
point
'
set
@numbertostring
=
replace
(
@numbertostring
,
'
point
'
,
''
)
return
@numbertostring
end
go
select
dbo.f_numbertostring(
12223.01
)
/*
------------------------------------ one hundred and twenty-three (所影响的行数为 1 行)
*/
select
dbo.f_numbertostring(
100001000
)
/*
------------------------------------ twelve thousand three hundred and one (所影响的行数为 1 行)
*/
drop
function
decodehundred,f_numbertostring
阿拉伯数字转英文
最新推荐文章于 2021-07-17 19:34:57 发布