首页 > 数据库 >SQLSEVER 实现货币数字转中文汉字

SQLSEVER 实现货币数字转中文汉字

时间:2024-10-18 14:43:02浏览次数:1  
标签:中文 SET -- 汉字 REPLACE STUFF LEN SQLSEVER returnStr

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;

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

标签:中文,SET,--,汉字,REPLACE,STUFF,LEN,SQLSEVER,returnStr
From: https://www.cnblogs.com/LearnerPing/p/18474270

相关文章

  • DevExpress WinForms中文教程:Data Grid - 如何为网格绑定ADO. NET数据
    在本教程中,您将学习如何做到以下几点:在一个WinForms项目中创建并配置ADO.NET数据源将DevExpressWinForms数据网格绑定到数据源。将更改发布到数据库。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能......
  • Linux中文件的读写过程
    文件的读取过程在Linux系统中,读取文件的过程主要由操作系统内核通过文件系统与存储设备的交互来完成。以下是文件读取过程的详细步骤:1.系统调用阶段当用户程序(如cat、less)请求读取文件时,会调用系统调用(如open()或read())来请求访问文件。这些调用会传递文件路径等参数给内......
  • 【原创】修复lazport用lrPDFExport导出含中文的pdf中文变为框框的Bug
    lazport用lrPDFExport导出含中文的pdf中文会变为框框。lazport用lrPDFExport导出含中文的pdf中文变为框:修复步骤:打开lr_e_fclpdf.pas1、修改333行的functionDefFontName:string; 增加缺省字体:宋体/仿宋/楷体/和黑体等字体对名称,修改后如果系统如已安装以下字体之一就可以正常......
  • TowardsDataScience-博客中文翻译-2022-五十二-
    TowardsDataScience博客中文翻译2022(五十二)原文:TowardsDataScience协议:CCBY-NC-SA4.0一维信号的迁移学习原文:https://towardsdatascience.com/transfer-learning-with-a-one-dimensional-signal-76a0d543e9aa加上数据洞察力图片作者。目录——简介——信号统计......
  • TowardsDataScience-博客中文翻译-2022-二十九-
    TowardsDataScience博客中文翻译2022(二十九)原文:TowardsDataScience协议:CCBY-NC-SA4.0如何使用计算机视觉读取酒瓶上的标签?(第一部分)原文:https://towardsdatascience.com/how-to-read-a-label-on-a-wine-bottle-using-computer-vision-part-1-25447f97a761欢迎阅读本......
  • vecode写c++遇到窗口一闪而过+中文乱码咋办
    本人没使用系统cmd窗口,而是使用了vscode内置终端,目的是为了之后输出中文的时候不乱码(vscode是utf-8,cmd是gbk,干脆全部使用vscode,不使用系统cmd作为输出窗口)附上配置文件:launch.json{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解......
  • Linux环境下Matplotlib绘图中文乱码问题
    问题:如图所示,中文乱码1.准备ttf字体文件:路径: C:\Windows\Fonts例如楷体:simkai.ttf2.查看当前环境的matplot字体路径:importmatplotlibprint(matplotlib.matplotlib_fname())运行结果:/home/3kyou/.local/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibr......
  • Bilidown v1.2.4 B站在线视频下载解析工具中文单文件版
    Bilidown是一款专为B站视频下载而设计的工具,一款简洁好用的B站视频下载工具,支持由UP主上传的单集,多集以及相关封面,弹幕,字幕,音乐,刮削等等,支持任意粒度批量组合,登录后最高支持到1080P,大会员可获取所有画质及音质。Bilidown具有强大的功能和简便的操作界面。Bilidown可以下载B站上......
  • Chinese-LLaMA-Alpaca-2: 新一代开源中文大语言模型
    Chinese-LLaMA-Alpaca-2:新一代开源中文大语言模型近日,由哈尔滨工业大学讯飞联合实验室推出的Chinese-LLaMA-Alpaca-2项目引起了广泛关注。该项目是中文LLaMA&Alpaca大模型的第二期,基于Meta发布的可商用大模型Llama-2进行开发,推出了一系列全新的中文大语言模型。本文将对这个......
  • 2024版FL Studio中文版本免激活安装包下载!音乐人的必备神器!
    ......