當前位置:首頁 » 編程語言 » SQL人民幣大寫

SQL人民幣大寫

發布時間: 2022-08-31 08:42:14

A. sql人民幣的大小寫分別是什麼

建立一個函數,函數如下
CREATE FUNCTION [dbo].[f_num_chn] (@num numeric(14,5))
RETURNS varchar(100) WITH ENCRYPTION
AS
BEGIN
DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int
SET @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100) AS bigint) AS varchar(20)),14)
SET @c_data=''
SET @i=1
WHILE @i<=14
BEGIN
SET @n_str=SUBSTRING(@n_data,@i,1)
IF @n_str<>' '
BEGIN
IF not ((SUBSTRING(@n_data,@i,2)='00') or
((@n_str='0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))
SET @c_data=@c_data+SUBSTRING('零壹貳叄肆伍陸柒捌玖',CAST(@n_str AS int)+1,1)
IF not ((@n_str='0') and (@i<>4) and (@i<>8) and (@i<>12))
SET @c_data=@c_data+SUBSTRING('仟佰拾億仟佰拾萬仟佰拾圓角分',@i,1)
IF SUBSTRING(@c_data,LEN(@c_data)-1,2)='億萬'
SET @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)
END
SET @i=@i+1
END
IF @num<0
SET @c_data='(負數)'+@c_data
IF @num=0
SET @c_data='零圓'
IF @n_str='0'
SET @c_data=@c_data+'整'
RETURN (@c_data)
END

調用
select [dbo].[f_num_chn](120)

B. sql2005中自帶的人民幣轉為大寫函數求大神幫助

說明: 1.本函數范圍從 毫 ~ 兆 2.有四種精度(元,角 ,分,厘 ,毫) 3.有三種進位規則(四捨五入,接捨去,非0就入) 參數說明:dbo.MoneyToCapital( 數值 , 進位 , 精度) 進位(0 四捨五入, 1 直接捨去,2 非0就入) 精確度 (0 元,1 角 ,2 分,3 厘 ,4 毫) -------------------------------------------------------------------------------------------------------- --測試數據: DECLARE @intNum decimal(38,4) SET @intNum = 1123456780.2154 --SET @intNum = 1001 --SET @intNum = 100100 --SET @intNum = 1005001 --SET @intNum = 100.11 --SET @intNum = 100.00 --SET @intNum = 100.01 SET @intNum = 99999999999999.9999 -- 最大 <1百兆(精確到毫) --SET @intNum = 10025.1234 --SET @intNum = 12345.6789 SELECT dbo.MoneyToCapital(@intNum,0,4) -------------------------------------------------------------------------------------------------------- */ CREATE FUNCTION MoneyToCapital ( @mnyNumber decimal(38,4), @intIsRound int = 0, -- 進位 (0 四捨五入, 1 直接捨去,2 非0就入) @intPrecision int = 2 -- 精確度: 0 元,1 角 ,2 分,3 厘 ,4 毫 ) RETURNS nvarchar(50) BEGIN DECLARE @strReturn nvarchar(50) DECLARE @strMoney varchar(50) DECLARE @intLen int DECLARE @strC1 char(1) DECLARE @strC2 char(1) DECLARE @strC3 char(1) DECLARE @intJ int DECLARE @necMoney decimal(38,4) DECLARE @strMoneyUnit nvarchar(50) DECLARE @strNumberCapital nvarchar(50) SET @strMoneyUnit = '毫釐分角元拾佰仟萬拾佰仟億拾佰仟兆拾佰仟京拾佰仟' SET @strNumberCapital = '零壹貳叄肆伍陸柒捌玖' --0 的情況 IF @mnyNumber = 0 BEGIN SET @strReturn = '零元整' RETURN @strReturn END --超出范圍 的情況 IF @mnyNumber < 0 OR @mnyNumber > 99999999999999.9999 BEGIN RETURN CAST(@mnyNumber AS varchar(50)) END ------進位 超出范圍 IF @intIsRound<0 OR @intIsRound>2 BEGIN SET @intIsRound = 0 END ------精確度 超出范圍 IF @intPrecision<0 OR @intPrecision>4 BEGIN SET @intPrecision = 2 END IF @intIsRound =1 BEGIN--直接捨去 SET @mnyNumber = ROUND(@mnyNumber,2,1) END ELSE IF @intIsRound = 2 BEGIN--非0就入 SET @mnyNumber = ROUND(@mnyNumber,2) END ELSE BEGIN--四捨五入 SET @mnyNumber = ROUND(@mnyNumber,@intPrecision) END SET @necMoney = @mnyNumber * POWER(10,@intPrecision) --精確度 @intPrecision SET @strMoney = CAST(CAST(@necMoney AS bigint) AS varchar(50)) SET @intLen = LEN(@strMoney) --長度 SET @strMoney = REVERSE(@strMoney) --逆轉 SET @strReturn='' SET @intJ = 1 -- @intPrecision 精確度: 0 元,1 角 ,2 分,3 厘 ,4 毫( 1 開始對應 毫) WHILE @intJ <= @intLen BEGIN SET @strC1 = SUBSTRING(@strMoney,@intJ-1,1) SET @strC2 = SUBSTRING(@strMoney,@intJ,1) SET @strC3 = SUBSTRING(@strMoney,@intJ+1,1) /* IF @strC2='0' BEGIN--當前數是 0 IF @strC1<>'0' AND @intJ<>1 BEGIN --前一個不是0則加 '零' SET @strReturn = dbo.NumberToCapital(@strC2) + @strReturn END END ELSE BEGIN SET @strReturn = dbo.NumberToCapital(@strC2) + dbo.GetMoneyUnit(@intJ,@strC1,@strC2) + @strReturn END */ SET @strReturn = SUBSTRING(@strNumberCapital , CAST(@strC2 AS int)+1 , 1) +SUBSTRING(@strMoneyUnit , @intJ+4-@intPrecision , 1) + @strReturn SET @intJ = @intJ + 1 END /* SET @strReturn = CAST(@strReturn AS varchar(100)) SET @strReturn = REPLACE(@strReturn,'零元','元') SET @strReturn = REPLACE(@strReturn,'零拾','拾') SET @strReturn = REPLACE(@strReturn,'零佰','佰') SET @strReturn = REPLACE(@strReturn,'零仟','仟') SET @strReturn = REPLACE(@strReturn,'零萬','萬') SET @strReturn = REPLACE(@strReturn,'零億','億') */ RETURN @strReturn END --String1 = "零壹貳叄肆伍陸柒捌玖" --String2 = "萬仟佰拾億仟佰拾萬仟佰拾元角分厘毫"

C. 用SQL編一個把數字的錢(如100.50)轉化成大寫的錢(如壹佰圓零五角整)的程序

創建一個存儲過程就行了

CREATE PROCEDURE dbo.L2U
(
@n_LowerMoney numeric(15,2),
@v_TransType int,
@RET VARCHAR(200) output
)
AS

Declare @v_LowerStr VARCHAR(200) -- 小寫金額
Declare @v_UpperPart VARCHAR(200)
Declare @v_UpperStr VARCHAR(200) -- 大寫金額
Declare @i_I int

set nocount on

select @v_LowerStr = LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) --四捨五入為指定的精度並刪除數據左右空格

select @i_I = 1
select @v_UpperStr = ''

while ( @i_I <= len(@v_LowerStr))
begin
select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)
WHEN '.' THEN '元'
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 @i_I
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 '拾'
WHEN 10 THEN '佰'
WHEN 11 THEN '仟'
WHEN 12 THEN '億'
WHEN 13 THEN '拾'
WHEN 14 THEN '佰'
WHEN 15 THEN '仟'
WHEN 16 THEN '萬'
ELSE ''
END
select @v_UpperStr = @v_UpperPart + @v_UpperStr
select @i_I = @i_I + 1
end

--------print '//v_UpperStr ='+@v_UpperStr +'//'

if ( @v_TransType=0 )
begin
select @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零億零萬零元','億元')
select @v_UpperStr = REPLACE(@v_UpperStr,'億零萬零元','億元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零億零萬','億')
select @v_UpperStr = REPLACE(@v_UpperStr,'零萬零元','萬元')
select @v_UpperStr = REPLACE(@v_UpperStr,'萬零元','萬元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零億','億')
select @v_UpperStr = REPLACE(@v_UpperStr,'零萬','萬')
select @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
end

-- 對壹元以下的金額的處理
if ( substring(@v_UpperStr,1,1)='元' )
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if (substring(@v_UpperStr,1,1)= '零')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if (substring(@v_UpperStr,1,1)='角')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( substring(@v_UpperStr,1,1)='分')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end
if (substring(@v_UpperStr,1,1)='整')
begin
select @v_UpperStr = '零元整'
end
select @ret=@v_UpperStr
GO

使用時調用這個存儲過程

declare @ret varchar(200)
exec L2U 567983.897,1,@ret output
select @ret

D. 如何用SQL語言實現人民幣的大小寫轉換

首先sql不可能實現大小寫轉換,如果你非實現就使用存儲過程
其次,實現大小寫轉換,可從數學的高位到低位,把各個位上的數取出通過數組轉換成大寫,然後加上單位。形成一個字元串,如1020形成壹仟零佰貳拾零元。事先建立一個數組,數組的第1項就對應著壹,第2項對應著貳。
然後進行二次加工,從低位到高位,找到第一個非0的位,然後以這個位為起點,把該位和下一個非零位之間所有的字元保留零。

E. 怎麼從mysql遍歷出人民幣大寫然後輸入到頁面,求大神啊

幹嘛要SQL?JS就能搞定

functionToUpper(v){
varstrOutput="";
strUnit='仟佰拾億仟佰拾萬仟佰拾元角分';
v+="00";
varintPos=v.indexOf('.');
if(intPos>=0){
v=v.substring(0,intPos)+v.substr(intPos+1,2);
}
strUnit=strUnit.substr(strUnit.length-v.length);
for(vari=0;i<v.length;i++){
strOutput+='零壹貳叄肆伍陸柒捌玖'.substr(v.substr(i,1),1)+strUnit.substr(i,1);
}
vardata=strOutput.replace(/零角零分$/,'整').replace(/零[仟佰拾]/g,'零').replace(/零{2,}/g,'零').replace(/零([億|萬])/g,'$1').replace(/零+元/,'元').replace(/億零{0,3}萬/,'億').replace(/^元/,"零元")

returndata;
}

F. SQL人民幣的大小寫轉換

建立一個函數,函數如下
CREATE FUNCTION [dbo].[f_num_chn] (@num numeric(14,5))
RETURNS varchar(100) WITH ENCRYPTION
AS
BEGIN
DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int
SET @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100) AS bigint) AS varchar(20)),14)
SET @c_data=''
SET @i=1
WHILE @i<=14
BEGIN
SET @n_str=SUBSTRING(@n_data,@i,1)
IF @n_str<>' '
BEGIN
IF not ((SUBSTRING(@n_data,@i,2)='00') or
((@n_str='0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))
SET @c_data=@c_data+SUBSTRING('零壹貳叄肆伍陸柒捌玖',CAST(@n_str AS int)+1,1)
IF not ((@n_str='0') and (@i<>4) and (@i<>8) and (@i<>12))
SET @c_data=@c_data+SUBSTRING('仟佰拾億仟佰拾萬仟佰拾圓角分',@i,1)
IF SUBSTRING(@c_data,LEN(@c_data)-1,2)='億萬'
SET @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)
END
SET @i=@i+1
END
IF @num<0
SET @c_data='(負數)'+@c_data
IF @num=0
SET @c_data='零圓'
IF @n_str='0'
SET @c_data=@c_data+'整'
RETURN (@c_data)
END

調用
select [dbo].[f_num_chn](120)

G. 如何用PL/SQL 把數字轉換成人民幣漢字大寫

發一個sql server的給你參考,

mssql sqlserver數字(金額)轉換為大寫

這個裡面主要轉換原理為:遍歷數字,如果將數字0~9分別轉換為對應個數的漢字,

先從最高位開始轉換,被億 千 百 整除,加上相應的整除數。

H. postgresql 資料庫自定義函數人民幣大寫轉換

這個為啥不在代碼裡面實現,資料庫做這個事有點牽強

熱點內容
安卓為什麼下不了方舟生存進化 發布:2025-01-16 08:02:32 瀏覽:194
如何登錄男朋友的微信密碼 發布:2025-01-16 07:41:14 瀏覽:194
寶駿解壓流程 發布:2025-01-16 07:35:35 瀏覽:2
兩匹壓縮機多少錢 發布:2025-01-16 07:29:19 瀏覽:635
個人pc搭建游戲伺服器 發布:2025-01-16 07:27:09 瀏覽:970
存儲剩餘照片 發布:2025-01-16 07:25:01 瀏覽:50
ftp解除限制上傳文件個數 發布:2025-01-16 07:16:26 瀏覽:348
梯度下降法python 發布:2025-01-16 07:10:43 瀏覽:520
載入並編譯著色器apex 發布:2025-01-16 07:00:08 瀏覽:59
方舟出售腳本 發布:2025-01-16 06:57:55 瀏覽:955