下面为您介绍的SQL函数功能是将小写金额转换成大写,如果您在此方面遇到过问题,不妨一看,相信对您学习SQL函数能够有所帮助。
参数:@LowerMoney 小写金额 加上小数点最长可以保留38位输出:大写金额简介:SQL版 小写金额转换成大写金额(最多可以精确到小数点四位)注: Decimal 数据类型最多可存储 38 个数字转载:请保留以上信息,谢谢!!!********************************************************/
SET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGO
Create Function LowerToUpper(@LowerMoney Decimal(38,4))Returns Varchar(200) –返回的大写金额的字符AsBeginDeclare @LowerStr Varchar(50) –小写金额Declare @UpperStr Varchar(200) –大写金额Declare @UpperTmp Varchar(15) –大写金额的临时字符串Declare @i Int –递增量Declare @LowerLen Int –小写金额的总长度
Set @LowerStr = @LowerMoney –把Decimal型的值全部赋给字符串变量 注:(赋值过去的话如8 在字符串变量中是显示8.0000 因为小数位精确到四位,没有的话,它会自动补0)Set @LowerStr = Replace(@LowerStr,’.’,”) –把小数点替换成空字符 –精确到小数点的四位 角分厘毫
Set @LowerLen = Len(@LowerStr) –获取小写金额的总长度(包括四个小数位)Select @i = 1,@UpperStr = ”,@UpperTmp = ” –设置默认初始值
While @i <= @LowerLenBeginSet @UpperTmp = Case #p#When SubString(@LowerStr,@LowerLen – @i + 1,1) = ‘0’ And @i = ***nd (Convert(Int,Right(@LowerStr,4)) = 0 Or @LowerLen > 5) Then ‘元’ –注:如果个位为0的话,并且四位小数都是0或者它的长度超过5(也就是超过元),则为元–When SubString(@LowerStr,@LowerLen – @i + 1,1) = ‘0’ Then ”Else+ Case SubString(@LowerStr,@LowerLen – @i + 1,1) –看当前位是数字几,就直接替换成汉字繁体大写When ‘0’ Then ‘零’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 ‘玖’End+ Case @iWhen 1 Then ‘毫’When 2 Then ‘厘’When 3 Then ‘分’When 4 Then ‘角’When 5 Then ‘元’When 9 Then ‘萬’When 13 Then ‘亿’When 17 Then ‘兆’When 21 Then ‘京’When 25 Then ‘垓’When 29 Then ‘杼’When 33 Then ‘穰’When 37 Then ‘沟’ –Decimal型***长度是38 后面的就不用再考虑了Else #p#+ Case @i%4When 2 Then ‘拾’ –拾 6 10 14 18 22 26 30 34 38 …………When 3 Then ‘佰’ –佰 7 11 15 19 23 27 31 35 39 …………When 0 Then ‘仟’ –仟 8 12 16 20 24 28 32 36 40 …………EndEndEndSet @UpperStr = Isnull(@UpperTmp,”) + Isnull(@UpperStr,”)Set @i = @i + 1EndIf Convert(Int,Right(@LowerStr,4)) = 0 Set @UpperStr = LEFT(@UpperStr,Len(@UpperStr)-8) + ‘整’ –判断小数位数是不是都是0,是0就可以取整While Patindex(‘%零[仟佰拾角分厘毫零]%’,@UpperStr) <> 0 –把零拾或零佰或零零变成一个零BeginSet @UpperStr = stuff(@UpperStr,patindex(‘%零[仟佰拾角分厘毫零]%’,@UpperStr),2,’零’)EndWhile Patindex(‘%[沟穰杼垓京兆亿萬]零[沟穰杼垓京兆亿萬]%’,@UpperStr) <> 0 –把零萬或零亿的清空掉BeginSelect @UpperStr = Stuff(@UpperStr,Patindex(‘%[沟穰杼垓京兆亿萬]零[沟穰杼垓京兆亿萬]%’,@UpperStr)+1,2,”)EndWhile Patindex(‘%[仟佰拾]零[沟穰杼垓京兆亿萬]%’,@UpperStr) <> 0 –把类似拾零萬或佰零萬或仟零萬中间的零清空掉BeginSelect @UpperStr = Stuff(@UpperStr,Patindex(‘%[仟佰拾]零[沟穰杼垓京兆亿萬]%’,@UpperStr)+1,1,”)EndIf Patindex(‘%_零[元]%’,@UpperStr) <> 0 –把类似拾零元或百零元中间的零清空掉BeginSelect @UpperStr = Stuff(@UpperStr,Patindex(‘%_零[元]%’,@UpperStr) + 1,1,”)EndElse If (Patindex(‘零[元]%’,@UpperStr) <> 0) And (Convert(Int,Right(@LowerStr,4)) <> 0) –判断当前否是零元开头,并且后面的四个小数不为0BeginSelect @UpperStr = Stuff(@UpperStr,Patindex(‘零[元]%’,@UpperStr),2,”) –把零元清空掉EndIf Right(@UpperStr,1) = ‘零’ Set @UpperStr = Left(@UpperStr,Len(@UpperStr)-1) –如果***一位是零也清空掉If @UpperStr = ‘元整’ Set @UpperStr = ‘零’ + @UpperStr –如果只是0的话,就显示零元整Return @UpperStr –返回大写金额End
GOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGO #p#
–调用方法Select dbo.LowerToUpper(120000000) –壹亿贰仟萬元整Select dbo.LowerToUpper(102000000) –壹亿零贰佰萬元整Select dbo.LowerToUpper(100200000) –壹亿零贰拾萬元整Select dbo.LowerToUpper(100020000) –壹亿零贰萬元整Select dbo.LowerToUpper(100002000) –壹亿贰仟元整
【编辑推荐】
去掉参数内HTML代码的SQL函数

sql函数生成助记码的实例
SQL中表变量的不足
详解SQL中循环结构的使用
SQL循环执行while控制
MySQL的SELECT查询结果的显示?
把SELECT * FROM USERS;最后的;改成\GG要大写.
sql语句大小写有关系吗?
SQL大小写并不敏感,但是如果是引起来的字符,则是区分大小写的,示例如下,1、创建测试表,create table test_uporlow(id number, value varchar2(20));2、插入样例数据,insert into test_uporlow values (301,Abcd);insert into test_uporlow values (302,cdef);insert into test_uporlow values (303,fgh);insert into test_uporlow values (304,acdfg);commit;3、查询所有含大写字母A记录,select t.*, rowid from TEST_UPORLOW t where value like A%,可以发现只能取出大写的A,表名TEST_UPORLOW大写或者小写都是可以的,4、查询所有含小写字母a记录,select t.*, rowid from TEST_UPORLOW t where value like a%,可以发现只能取出大写的a,
如何恢复MySQL主从数据一致性
1. 备份主库数据,并在从库上恢复,在历史数据一致性的基础上开启同步,但这种方法比较麻烦,必须在主库上执行锁表操作,阻止客户端对于表数据的更新操作,而且在数据量大的情况下,备份也是个耗时的工程。 其实,这种方法在实际生产环境中也很少用。 2. Skip掉相关错误其实,这个说活不是很严谨,准备的说,是跳过相关的事务。 在我今天这种情况下,就是skip掉因违反主键约束而失败的insert语句。
发表评论