MsSQL 函數,實現數字轉換成人民幣大寫

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 <倉庫…