SQL人民币的大小写转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL人民币的大小写转换相关的知识,希望对你有一定的参考价值。
输入的是阿拉伯数字,转换成大写形式。如120元转换成壹百贰拾元整
建立一个函数,函数如下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) 参考技术A 如果在sql里直接操作要写过程,用if 判断,在sql里做很麻烦的,至于有没有直接转换的函数我还不是很清楚。建议你把这些操作转移到程序里进行转换。
js将人民币小写金额转换为大写
以下为es6写法,可以直接在控制栏粘贴运行
/**
* 将人民币小写金额转换为大写
*
* @class RMB
* 示例
let rmb = new RMB()
console.log(rmb.transform(2114523.234))// 贰佰壹拾壹万肆仟伍佰贰拾叁元贰角叁分
*/
class RMB
constructor()
this.numMap = new Map([[0, '零'], [1, '壹'], [2, '贰'], [3, '叁'], [4, '肆'], [5, '伍'], [6, '陆'], [7, '柒'], [8, '捌'], [9, '玖']])
this.integerMap = new Map([[0, '元'], [1, '拾'], [2, '佰'], [3, '仟'], [4, '万'], [5, '拾'], [6, '佰'], [7, '仟'], [8, '亿']])
this.decimalMap = new Map([[0, '分'], [1, '角']])
this.resultSet = new Set()
/**
* 转换
*
* @param number num 待转换的整数
* @returns
* @memberof RMB
*/
transform(num)
this.resultSet.clear()
num = ('' + num).split('.')
let integer = num[0],
decimal = num[1] ? num[1].substr(0, 2) : []
this.add(integer, this.integerMap).add(decimal, this.decimalMap)
return [...this.resultSet].join('')
/**
* 转换
*
* @param array numType
* @param map mapType
* @returns
* @memberof RMB
*/
add(numType, mapType)
let len = numType.length
for (let i = 0; i < len; i++)
this.resultSet.add(this.numMap.get(+numType[i]) + (+numType[i] ? mapType.get(len - i - 1) : ''))
return this
let rmb = new RMB()
console.log(rmb.transform(2114523.234))// 贰佰壹拾壹万肆仟伍佰贰拾叁元贰角叁分
以上是关于SQL人民币的大小写转换的主要内容,如果未能解决你的问题,请参考以下文章