MsSQL 函数,实现数字转换成人民币大写

-- 如果函数已存在则删除
IF OBJECT_ID('dbo.ConvertToRMBChineseNew', 'FN') IS NOT NULLDROP FUNCTION dbo.ConvertToRMBChineseNew
GOCREATE FUNCTION dbo.ConvertToRMBChineseNew
(@NumberInput SQL_VARIANT -- 使用 SQL_VARIANT 兼容数字和字符串输入
)
RETURNS NVARCHAR(200)
AS
BEGINDECLARE @Result NVARCHAR(200)DECLARE @NumStr NVARCHAR(50)DECLARE @IntegerPart NVARCHAR(20)DECLARE @DecimalPart NVARCHAR(2)DECLARE @TempStr NVARCHAR(20)DECLARE @Index INTDECLARE @Len INTDECLARE @Char NCHAR(1)DECLARE @UnitIndex INTDECLARE @ZeroFlag BIT-- 初始化结果SET @Result = N''SET @IntegerPart = N''SET @DecimalPart = N''SET @ZeroFlag = 0-- 定义大写数字和单位DECLARE @Digits TABLE (Digit INT, Char NVARCHAR(1))INSERT INTO @Digits VALUES (0, N'零'), (1, N'壹'), (2, N'贰'), (3, N'叁'), (4, N'肆'), (5, N'伍'), (6, N'陆'), (7, N'柒'), (8, N'捌'), (9, N'玖')DECLARE @Units TABLE (Position INT, Unit NVARCHAR(2))INSERT INTO @Units VALUES (1, N''), (2, N'拾'), (3, N'佰'), (4, N'仟'), (5, N'万'), (6, N'拾'), (7, N'佰'), (8, N'仟'), (9, N'亿'), (10, N'拾'), (11, N'佰'), (12, N'仟')-- 将输入转换为字符串SET @NumStr = LTRIM(RTRIM(CAST(@NumberInput AS NVARCHAR(50))))-- 处理空值或非数字IF @NumStr IS NULL OR @NumStr = '' OR ISNUMERIC(@NumStr) = 0RETURN N'无效输入'-- 转换为绝对值并格式化DECLARE @NumberValue DECIMAL(18,6)SET @NumberValue = ABS(CAST(@NumStr AS DECIMAL(18,6)))-- 分离整数和小数部分 - 修正关键点SET @IntegerPart = CAST(CAST(@NumberValue AS BIGINT) AS NVARCHAR(20))-- **关键修正:正确提取角分**-- 计算小数部分的角(第一位)和分(第二位)DECLARE @JiaoValue INT, @FenValue INTSET @JiaoValue = CAST((@NumberValue - CAST(@NumberValue AS BIGINT)) * 10 AS INT) -- 得到角SET @FenValue = CAST(((@NumberValue - CAST(@NumberValue AS BIGINT)) * 100) AS INT) % 10 -- 得到分-- 将角分转换为字符串用于后续逻辑判断(如果需要)SET @DecimalPart = RIGHT('0' + CAST(@JiaoValue AS NVARCHAR(1)), 1) + RIGHT('0' + CAST(@FenValue AS NVARCHAR(1)), 1)-- 注意:@DecimalPart 现在是 '角分' 两位,如 '60' for 0.6-- 处理整数部分 (保持不变)SET @Len = LEN(@IntegerPart)SET @Index = 1WHILE @Index <= @LenBEGINSET @Char = SUBSTRING(@IntegerPart, @Index, 1)SET @UnitIndex = @Len - @Index + 1SELECT @TempStr = Char FROM @Digits WHERE Digit = CAST(@Char AS INT)IF @Char != '0'BEGINSET @Result = @Result + @TempStrIF @UnitIndex IN (5, 9) OR @TempStr != N'零'SET @Result = @Result + (SELECT Unit FROM @Units WHERE Position = @UnitIndex)SET @ZeroFlag = 0ENDELSEBEGINIF @ZeroFlag = 0BEGINIF @UnitIndex IN (5, 9)SET @Result = @Result + N'零' + (SELECT Unit FROM @Units WHERE Position = @UnitIndex)ELSESET @Result = @Result + N'零'SET @ZeroFlag = 1ENDENDSET @Index = @Index + 1END-- 清理多余的"零"WHILE RIGHT(@Result, 1) = N'零' AND LEN(@Result) > 1 AND LEFT(RIGHT(@Result, 2), 1) != N'元'BEGINSET @Result = LEFT(@Result, LEN(@Result) - 1)ENDSET @Result = REPLACE(@Result, N'零零', N'零')SET @Result = REPLACE(@Result, N'零零', N'零')-- 添加"元"SET @Result = @Result + N'元'-- **关键修正:处理小数部分 (角和分)**DECLARE @Jiao NCHAR(1), @Fen NCHAR(1)SET @Jiao = SUBSTRING(@DecimalPart, 1, 1) -- 第一位是角SET @Fen = SUBSTRING(@DecimalPart, 2, 1)   -- 第二位是分-- 处理角IF @Jiao != '0'BEGINSELECT @TempStr = Char FROM @Digits WHERE Digit = CAST(@Jiao AS INT)SET @Result = @Result + @TempStr + N'角'ENDELSE IF @Fen != '0' -- 角为0但分不为0,需要加"零"BEGINSET @Result = @Result + N'零'END-- 处理分IF @Fen != '0'BEGINSELECT @TempStr = Char FROM @Digits WHERE Digit = CAST(@Fen AS INT)SET @Result = @Result + @TempStr + N'分'END-- **关键修正:只有当角和分都为0时才加"整"**IF @Jiao = '0' AND @Fen = '0'SET @Result = @Result + N'整'-- 清理结果SET @Result = REPLACE(@Result, N'元零整', N'元整')RETURN @Result
END
GO-- 使用示例
-- SELECT dbo.fn_NumberToRMB(6849.6) -- 应返回: 陆仟捌佰肆拾玖元陆角
-- SELECT dbo.fn_NumberToRMB('6849.6') -- 应返回: 陆仟捌佰肆拾玖元陆角
-- SELECT dbo.fn_NumberToRMB(1001) -- 应返回: 壹仟零壹元整
-- SELECT dbo.fn_NumberToRMB(0.05) -- 应返回: 零元伍分
-- SELECT dbo.fn_NumberToRMB(123.45) -- 应返回: 壹佰贰拾叁元肆角伍分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919685.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919685.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919685.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony深度定制:从系统到模块的全景剖析与自定义模块实战

摘要:OpenHarmony 作为面向万物互联时代的开源操作系统,其“系统-子系统-部件-模块”的四层架构设计,为开发者提供了高度可裁剪、可扩展的能力。本文将系统梳理这四层结构的职责边界与协作关系,并手把手演示如何向 OpenHarmony 新增一个可交付的自定义模块(Module),帮助…

数字社会学是干什么的?数字社会学理论与数字社会学家唐兴通讲数字社会学书籍有哪些?AI社会学人工智能社会学理论框架

在当今社会&#xff0c;传统物理空间和人际关系网络成为了许多年轻人寻找合适伴侣的重大障碍。以深圳为例&#xff0c;这座移民城市的大部分居民都来自外地&#xff0c;年轻人的人脉关系、尤其是亲戚关系大多仍在家乡。这使得深圳的单身男女在交友和婚恋方面的选择面变得狭窄&a…

数据库-MYSQL配置下载

目录 一.数据库概念 一、数据库的基本定义 二、数据库管理系统&#xff08;DBMS&#xff09; 三、数据库系统&#xff08;DBS&#xff09; 四、数据模型 五、数据库的特点 六、数据库的应用领域 二.MySql 一、开源免费&#xff0c;降低中大型项目成本 二、跨平台与兼容…

Java 中表示数据集的常用集合类

Java 中表示数据集的常用集合类 Java 集合框架提供了多种数据结构来表示和操作数据集&#xff0c;每种集合类都有其特定的用途和性能特征。以下是主要的集合类及其特点&#xff1a; 一、List 接口及其实现类 1. ArrayList 特点&#xff1a;基于动态数组实现优点&#xff1a;随机…

Django REST框架核心:GenericAPIView详解

Django REST framework (DRF) 中 GenericAPIView 的源码核心部分。 它是所有“泛型视图”的基础类&#xff0c;比如常用的 ListAPIView、RetrieveAPIView、CreateAPIView 都是继承自它。&#x1f31f; 作用继承自 APIView&#xff0c;因此仍然是一个标准的 DRF 视图。提供了常用…

深入解析HashMap的存储机制:扰动函数、哈希计算与索引定位

今天复习了一下HashMap的部分&#xff0c;写一篇博客记录一下今天学习内容虽然之前学习过&#xff0c;但由于后来没怎么使用过而且也没复习基本忘得差不多了在Java的HashMap中&#xff0c;高效存储键值对的核心在于哈希算法和索引定位。本文将结合源码逐步拆解存储流程&#xf…

【机器学习 / 深度学习】基础教程

阶段一&#xff1a;机器学习 / 深度学习基础教程定位&#xff1a;针对准备进入 AI多智能体开发 的初学者&#xff0c;打牢机器学习与深度学习的基础。一、为什么需要学习机器学习/深度学习 在进入智能体&#xff08;Agent&#xff09;开发之前&#xff0c;必须具备一定的 机器学…

ESP32应用——HTTP client(ESP-IDF框架)

目录 一、前言 二、URL 2.1 URL简介 2.2 URL示例 三、HTTP 3.1 HTTP协议概述 3.2 HTTP的工作原理 3.2.1 HTTP 请求-响应流程 3.2.2 HTTP 请求结构 3.2.3 HTTP请求方法 3.2.4 HTTP响应结构 3.2.5 HTTP状态码 四、ESP HTTP 客户端流程 五、ESP HTTP 客户端实战解析…

动学学深度学习07-现代卷积神经网络

动学学深度学习pytorch 参考地址&#xff1a;https://zh.d2l.ai/ 文章目录动学学深度学习pytorch1-第07章-现代卷积神经网络1. AlexNet1.1 AlexNet 的核心贡献是什么&#xff1f;1.2 AlexNet 与 LeNet 的主要区别有哪些&#xff1f;1.3 为什么 AlexNet 需要 GPU 训练&#xff1…

详细讲解Java中的反射和经典面试题(保姆级别)

1.1 反射的概述&#xff1a;专业的解释&#xff08;了解一下&#xff09;&#xff1a;是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意属性和方法&#xff1b;这种动态获取…

MyCAT完整实验报告

MyCAT完整实验报告 ‍ 前言 刚刚看了一下前面的那篇MyCAT的文章 感觉有一些问题 所以拿出一篇文章再说一下 单独构建了完整的实验环境 这样会全面一点 ‍ 安装MyCAT #跳过‍ 主从配置 #不多追溯 因为我们选择的主从 也可以做双主机 但我们后边再说‍ 环境搭建 一、环境规划 服务…

机器翻译论文阅读方法:顶会(ACL、EMNLP)论文解析技巧

更多内容请见: 机器翻译修炼-专栏介绍和目录 文章目录 一、论文选择:快速判断论文价值 1.1 关注核心会议与子领域 1.2 筛选标准 1.3 预读筛选 1.4 快速定位关键信息 二、精读解析 2.1 问题定义(5分钟) 2.2 方法解剖(15分钟) 2.3 实验深挖(20分钟) 2.4 批判性思考(10分…

Transformer模型实战篇

引入 基于Transformers的NLP解决方案的步骤如下&#xff1a;&#xff08;以文本分类为例&#xff09; 导入相关包&#xff0c;General&#xff0c;可以询问ai需要导什么包加载数据集&#xff0c;Data_loader&#xff0c;Datasets数据集划分&#xff0c;测试机&#xff0c;验证集…

深入(流批【牛批】框架)Flink的机制

flink本身是专注有状态的无限流处理&#xff0c;有限流处理【batch批次】是无限流处理的一中特殊情况&#xff01;应用场景实时ETL 集成流计算现有的诸多数据通道和SQL灵活的加工能力&#xff0c;对流式数据进行实时清洗、归并和结构化 处理&#xff1b;同时&#xff0c;对离线…

Git 2.15.0 64位安装步骤Windows详细教程从下载到验证(附安装包下载)

一、下载后双击运行 安装包下载&#xff1a;https://pan.quark.cn/s/7200b32a1ecf&#xff0c;找到下载好的文件&#xff1a;​Git-2.15.0-64-bit.exe​双击这个文件&#xff0c;就会弹出安装向导窗口&#xff0c;点 ​​“Next”&#xff08;下一步&#xff09;​​ 二、选择…

在职老D渗透日记day23:sqli-labs靶场通关(第29关-31关)http参数过滤

5.29.第29关 http参数过滤 闭合5.29.1.手动注入&#xff08;1&#xff09;判断注入类型、注入点闭合&#xff08;2&#xff09;有回显&#xff0c;优先用联合查询注入&#xff0c;判读字段数?id1&id2 order by 3 -- ?id1&id2 order by 4 --&#xff08;3&#xff09;…

Spring Boot整合Amazon SNS实战:邮件订阅通知系统开发

Spring Boot整合Amazon SNS实战引言配置服务总结新用户可获得高达 200 美元的服务抵扣金 亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐&#xff08;Amazon Free Tier&#xff09;。注册即可获得 100 美元的服务抵扣金&#xff0c;在探索关键亚马逊云科技服务时可以再额…

LeetCode_动态规划1

动态规划1.动态规划总结1.1 01背1.1.1 二维数组1.1.2 一维数组1.2 完全背包2.斐波那契数(力扣509)3.爬楼梯(力扣70)4.使用最小花费爬楼梯(力扣746)5.不同路径(力扣62)6.不同路径 II(力扣63)7.整数拆分(力扣343)8.不同的二叉搜索树(力扣96)9.分割等和子集(力扣416)10.最后一块石…

【STM32】HAL库中的实现(九):SPI(串行外设接口)

SPI 接口通信原理 SPI&#xff08;Serial Peripheral Interface&#xff09;是全双工主从通信协议&#xff0c;特点是&#xff1a; 信号线功能SCK串行时钟MOSI主设备输出&#xff0c;从设备输入MISO主设备输入&#xff0c;从设备输出CS&#xff08;NSS&#xff09;片选信号&am…

Git常用操作大全(附git操作命令)

Git常用操作大全 一、基础配置 1.1 设置用户名和邮箱 git config --global user.name "你的名字" git config --global user.email "你的邮箱"1.2 查看配置 git config --list二、仓库管理 2.1 初始化本地仓库 git init2.2 克隆远程仓库 git clone <仓库…