SQLSEVER 实现数字转换成中文(货币)

-- =============================================
-- Author: LearnerPing
-- Create date: 2024/10/18
-- Description: Change Number to Chinese
-- =============================================
Create FUNCTION GetNumberToChi
(
@p_amt NUMERIC(19,6)
)
RETURNS NVARCHAR(200) --返回返回值的数据类型
AS
BEGIN
DECLARE @p_amt_str NUMERIC(19,2)
DECLARE @returnStr NVARCHAR(200); -- 如果金额大于等于1亿,则返回 '##########'
IF (@p_amt >= 1000000000)
SET @returnStr = N'##########';
ELSE
-- 否则,返回 '00000000000'
SET @returnStr = N'00000000000'; SET @p_amt_str = ROUND(@p_amt,2)
-- 将金额转换为12位字符串,并右对齐
SET @returnStr = RIGHT(@returnStr + CAST(ROUND(@p_amt_str, 11, 2) AS NVARCHAR(12)), 12); -- 将数字替换为中文数字
SET @returnStr = REPLACE(@returnStr, N'0', N'零');
SET @returnStr = REPLACE(@returnStr, N'1', N'壹');
SET @returnStr = REPLACE(@returnStr, N'2', N'贰');
SET @returnStr = REPLACE(@returnStr, N'3', N'叁');
SET @returnStr = REPLACE(@returnStr, N'4', N'肆');
SET @returnStr = REPLACE(@returnStr, N'5', N'伍');
SET @returnStr = REPLACE(@returnStr, N'6', N'陆');
SET @returnStr = REPLACE(@returnStr, N'7', N'柒');
SET @returnStr = REPLACE(@returnStr, N'8', N'捌');
SET @returnStr = REPLACE(@returnStr, N'9', N'玖'); -- 添加单位
SET @returnStr = @returnStr + N'分';
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 1, 0, N'角');
SET @returnStr = REPLACE(@returnStr, N'.', N'元'); -- 添加金额单位
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 5, 0, N'拾');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 7, 0, N'佰');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 9, 0, N'仟');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 11, 0, N'万');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 13, 0, N'拾');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 15, 0, N'佰');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 17, 0, N'仟');
SET @returnStr = STUFF(@returnStr, LEN(@returnStr) - 19, 0, N'亿'); -- 替换零和单位
SET @returnStr = REPLACE(@returnStr, N'零亿', N'零');
SET @returnStr = REPLACE(@returnStr, N'零仟', N'零');
SET @returnStr = REPLACE(@returnStr, N'零佰', N'零');
SET @returnStr = REPLACE(@returnStr, N'零拾', N'零');
SET @returnStr = REPLACE(@returnStr, N'零零零', N'零');
SET @returnStr = REPLACE(@returnStr, N'零零', N'零');
SET @returnStr = REPLACE(@returnStr, N'零万', N'万');
SET @returnStr = REPLACE(@returnStr, N'零元', N'元');
SET @returnStr = REPLACE(@returnStr, N'零角', N'零');
SET @returnStr = REPLACE(@returnStr, N'零分', N''); -- 替换壹拾和佰拾
SET @returnStr = REPLACE(@returnStr, N'壹拾', N'拾');
SET @returnStr = REPLACE(@returnStr, N'佰拾', N'佰壹拾'); -- 去除多余的零
WHILE (LEFT(@returnStr, 1) = N'零')
BEGIN
SET @returnStr = RIGHT(@returnStr, LEN(@returnStr) - 1);
END IF (LEFT(@returnStr, 1) = N'万')
SET @returnStr = RIGHT(@returnStr, LEN(@returnStr) - 1); IF (LEFT(@returnStr, 1) = N'元')
SET @returnStr = RIGHT(@returnStr, LEN(@returnStr) - 1); WHILE (LEFT(@returnStr, 1) = N'零')
BEGIN
SET @returnStr = RIGHT(@returnStr, LEN(@returnStr) - 1);
END WHILE (RIGHT(@returnStr, 1) = N'零')
BEGIN
SET @returnStr = LEFT(@returnStr, LEN(@returnStr) - 1);
END -- 替换亿万和零元
SET @returnStr = REPLACE(@returnStr, N'亿万', N'亿零');
SET @returnStr = REPLACE(@returnStr, N'零元', N'元'); -- 如果返回字符串为空,则返回 '零元'
IF (@returnStr = N'')
SET @returnStr = N'零元'; -- 如果以元结尾,则添加 '正'
IF (RIGHT(@returnStr, 1) = N'元')
SET @returnStr = @returnStr + N'正'; RETURN @returnStr;
END;

可以在保留两位小数的前提下转换



SQLSEVER 实现货币数字转中文汉字的更多相关文章

  1. JS货币数字转换中文

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等

    C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...

  3. c++ 实现将数字转换为中文数字输出

    实现如下函数: void printInChinese(int num); 这个函数输入一个小于100000000(一亿)的正整数,并在屏幕上打印这个数字的中文写法. 例如: 17 -> 一十七 ...

  4. Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序

    发布时间:2018-11-16   技术:Android   概述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 简体中文 拼音排 ...

  5. C# 数字转换成汉字大写 数值转换成汉字大写

    1.数字转换成汉字大写 public string NumToChinese(string x) { //数字转换为中文后的数组 //转载请注明来自 http://www.shang11.com st ...

  6. js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换&#XXX函数代码

    最近看不少在线工具里面都有一些编码转换的代码,很多情况下我们都用得到,这里脚本之家小编就跟大家分享一下这些资料 Unicode介绍 Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编 ...

  7. 将金额数字转换为大写汉字的js函数

    //将金额数字转换为大写汉字的函数 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁 ...

  8. LCD1602显示中文汉字

    小子在西藏 2011-11-25编写 特别说明笔者是上面的作者,感谢那些原意分享知识的人.时隔5年我又看到了笔者当年写的东西,我想这期间还有许许多多的人 今天写在博客上,愿更多后来者可以学习. LCD ...

  9. Java正则表达式过滤出字母、数字和中文

    原文:http://blog.csdn.net/k21325/article/details/54090066 1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A ...

  10. 用C#生成随机中文汉字验证码的基本原理

    前几天去申请免费QQ号码,突然发现申请表单中的验证码内容换成了中文,这叫真叫我大跌眼镜感到好笑,Moper上的猫儿们都大骂腾讯采用中文验证码.^_^  我不得不佩服腾讯为了防止目前网络上横行的QQ号码 ...

随机推荐

  1. baselines算法库common/atari_wrappers.py模块分析

    common/atari_wrappers.py模块代码如下: import numpy as np import os os.environ.setdefault('PATH', '') from ...

  2. python语言绘图:绘制一组二项分布图

    代码源自: https://github.com/PacktPublishing/Bayesian-Analysis-with-Python ============================= ...

  3. c#12 实验特性Interceptor如何使用的一个简单但完整的示例

    一直有很多转载dotnet对Interceptor说明文档的,但鲜有说明Interceptor如何使用的,这里写一篇简单示例来展示一下 c# 12 实验特性Interceptor 是什么? 官方解释如 ...

  4. keycloak~关于社区登录的过程说明

    keycloak将第三方登录(社区登录)进行了封装,大体主要会经历以下三个过程: 打开社区认证页面,输入账号密码或者扫码,完成社区上的认证 由社区进行302重定向,回到keycloak页面 keycl ...

  5. AtCoder Beginner Contest 363

    AtCoder Beginner Contest 363 前言 只出了三题,被 d 卡住了,事实上 e 题应该对我而言更简单,没及时换题. A - Piling Up (atcoder.jp) 思路 ...

  6. Linux C基础——” Makefile “ 文件管理大师你拜访过嘛?

    Make简介: 工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个"自动编译管理器",这里的"自动"是指它能够根据文件时间戳自动发现更新过的文 ...

  7. GC终结标记 SuspendEE 是怎么回事

    一:背景 1. 讲故事 写这篇是起源于训练营里有位朋友提到了一个问题,在 !t -special 输出中有一个 SuspendEE 字样,这个字样在 coreclr 中怎么弄的?输出如下: 0:000 ...

  8. C#反射在数据库操作中的应用(反射属性,反射字段)

    这几天学习反射的应用,今天把其应用到数据操作中 现记录学习笔记 环境为: 编译器:vs2017 数据库:access 反射类型为:字段 1先在类文件的定义是用哪种数据库,和用字段还是属性来反射 本例是 ...

  9. spark 中怎么像 pandas 里面对时间数据做 resample

    1. 笨办法 pandas Dataframe 可以很容易做时序数据的 resample,按照一定的frequency 聚合数据. 但是spark 中因为没有顺序的概念就不太好做,下面是怎么在spar ...

  10. ES6中的Set数据结构

    Set是ES6新推出的数据结构,Set结构里面的每个元素都是唯一的: 如何创建一个Set? // Set 构造函数接收一个数组进行初始化;如果什么都不传则创建一个空Set; var set = new ...