SQL货币数字转英文字符语句

 更新时间:2009年11月04日 00:24:19   作者:  
SQL货币数字转英文字符,需要的朋友可以参考下。
复制代码 代码如下:

Alter Function UDF_Util_ConvertCurrencyToEnglish
(
@Money Numeric(15,2),
@Unit varchar(10)='BAHT'
) Returns Varchar(400)
As
/*
/// <summary>
/// Convert money to english
/// </summary>
/// <param name="@Money">e.g. 1234.56 </param>
/// <param name="@Unit">e.g. 'BAHT' </param>
/// <returns>english money</returns>
*/
Begin
DECLARE @result Varchar(400)
IF @Money=0
Set @result= 'ZERO '+@Unit
Else
Begin
Declare @i Int, @hundreds Int, @tenth Int, @one Int, @thousand Int,@million Int,@billion Int,@numbers Varchar(400),@s Varchar(15)
Set @numbers='ONE TWO THREE FOUR FIVE '
+'SIX SEVEN EIGHT NINE TEN '
+'ELEVEN TWELEVE THIRTEEN FOURTEEN FIFTEEN '
+'SIXTEEN SEVENTEEN EIGHTEEN NINETEEN '
+'TWENTY THIRTY FORTY FIFTY '
+'SIXTY SEVENTY EIGHTY NINETY '

Set @s=RIGHT('000000000000000'+Cast(@Money As varchar(15)),15)
Set @billion=Cast(Substring(@s,1,3) As Int)
Set @million=Cast(Substring(@s,4,3) As Int)
Set @thousand=Cast(Substring(@s,7,3) As Int)
Set @result=''
Set @i=0

While @i<=3
BEGIN

Set @hundreds=Cast(Substring(@s,@i*3+1,1) As Int)
Set @tenth=Cast(Substring(@s,@i*3+2,1) As Int)
Set @one=(Case @tenth When 1 Then 10 Else 0 End)+Cast(Substring(@s,@i*3+3,1) As Int)
Set @tenth=(Case When @tenth<=1 Then 0 Else @tenth End)

IF (@i=3 and (@billion>0 or @million>0 or @thousand>0) and (@hundreds=0 and (@tenth>0 or @one>0)))
Set @result=@result+' AND '

IF @hundreds>0
Set @result=@result+RTRIM(Substring(@numbers,@hundreds*10-9,10))+' HUNDRED '

IF @tenth>=2 and @tenth<=9
BEGIN
IF @hundreds>0
Set @result=@result+' AND '
Set @result=@result+RTRIM(Substring(@numbers,@tenth*10+171,10))+' '
END

IF @one>=1 and @one<=19
BEGIN
IF @hundreds>0 AND @tenth=0
Set @result=@result+' AND '
Set @result=@result+RTRIM(Substring(@numbers,@one*10-9,10))
END

IF @i=0 and @billion>0
Set @result=@result+' BILLION '
IF @i=1 and @million>0
Set @result=@result+' MILLION '
IF @i=2 and @thousand>0
Set @result=@result+' THOUSAND '
Set @i=@i+1
END

IF(@result<>'')
Set @result=@result+' '+@Unit

IF Substring(@s,14,2)<>'00'
Begin
Set @tenth=CAST(Substring(@s,14,1) AS INT)
Set @one=CAST(Substring(@s,15,1) AS INT)

IF(@tenth>=2 and @tenth<=9)
Set @result=@result+RTRIM(Substring(@numbers,@tenth*10+171,10))
IF @tenth=1 AND @one>=1 and @one<=19
Set @result=@result+' '+RTRIM(Substring(@numbers,CAST(Substring(@s,14,2) AS INT)*10-9,10))
ELSE
Set @result=@result+' '+RTRIM(Substring(@numbers,@one*10-9,10))

SET @result=@result+' SATANG '
END
ELSE
Set @result=@result+' ONLY'

END
RETURN @result
END

相关文章

  • SQL提取数据库表名及字段名等信息代码示例

    SQL提取数据库表名及字段名等信息代码示例

    这篇文章主要介绍了SQL提取数据库表名及字段名等信息的方法,文中向大家分享了实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • sql多条件多字段排序(图文教程)

    sql多条件多字段排序(图文教程)

    sql多条件多字段排序是日常应用中比不可少的,本人搜集整理了一些,以供不时之需,需要了解的朋友可以参考下
    2012-12-12
  • sql中时间以5分钟半个小时任意间隔分组的实现方法

    sql中时间以5分钟半个小时任意间隔分组的实现方法

    这篇文章主要介绍了sql中时间以5分钟半个小时任意间隔分组的实现方法,在文中给大家提到了sql server时间查询的代码,需要的朋友可以参考下
    2019-06-06
  • sql server性能调优 I/O开销的深入解析

    sql server性能调优 I/O开销的深入解析

    这篇文章主要给大家介绍了关于sql server性能调优 I/O开销的相关资料,文中通过示例代码以及图片介绍的非常详细,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • SQL Server的触发器详解

    SQL Server的触发器详解

    本文详细讲解了SQL Server的触发器,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 一条SQL语句查询多个数据库

    一条SQL语句查询多个数据库

    最近做项目遇到这样的需求,要求一条SQL语句从多个数据库查询出相关联的结果,输出到客户端,怎么解决呢?下面小编给大家介绍下,一起看看吧
    2018-03-03
  • 探讨select in 在postgresql的效率问题

    探讨select in 在postgresql的效率问题

    这篇文章主要介绍了探讨select in 在postgresql的效率问题 的相关资料,需要的朋友可以参考下
    2016-04-04
  • SQL Server 2016 TempDb里的显著提升

    SQL Server 2016 TempDb里的显著提升

    SQL Server 2016的最新CTP版本已经发布了:CTP 2.4(目前已经是CTP 3.0)。这个预览版相比以前的CTP包含了很多不同的提升,此篇文章给大家介绍SQL Server 2016 TempDb里的显著提升,小伙伴一起来了解了解吧
    2015-11-11
  • SQL Server创建用户定义函数

    SQL Server创建用户定义函数

    这篇文章介绍了SQL Server创建用户定义函数的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • mssql server 2012(SQL2012)各版本功能对比

    mssql server 2012(SQL2012)各版本功能对比

    今天装了操作系统2012,也顺便搞下SQL 2012看了下版本,选择了自己的版本,也特留下版本对比供后来人参考
    2013-04-04

最新评论