Vertica 数据库 金额转大写函数

首先的确是得吐槽一下这个Vertical数据库。列式存储,的确很适合用来搭建数据仓库平台,但是原生自带的语法不太适合写存储过程和函数,不集成其他的语言来支持写自定义函数的话,拓展性还是不够强。我是没有找到循环结构,导致函数体很臃肿,有没有看到这里的大佬在留言处提供一波思路。

参数类型 varchar 数值格式类似0.22 转换上限万亿(可自行拓展)

其中TMP为我数据库上的一个模式名
案例:select TMP.MONEY_CHINESE_2(‘222.03’)

函数体


--参数类型 varchar 数值格式类似0.22 转换上限9万亿
--SELECT TMP.MONEY_CHINESE('800400634.08')
CREATE OR REPLACE FUNCTION TMP.MONEY_CHINESE(P_money Varchar)
RETURN Varchar
AS
BEGIN
RETURN (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
(CASE WHEN LENGTH(P_money)=4
		  THEN (CASE WHEN SUBSTR(P_money,1,1)<>'0' THEN SUBSTR(P_money,1,1)||'元' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN SUBSTR(P_money,3,1)||'角' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,4,1)<>'0' THEN SUBSTR(P_money,4,1)||'分' ELSE '' END)
		 WHEN LENGTH(P_money)=5/*拾*/
		  THEN (CASE WHEN SUBSTR(P_money,1,1)<>'0' THEN SUBSTR(P_money,1,1)||'拾' ELSE '' END)||
		            (CASE WHEN SUBSTR(P_money,2,1)<>'0' THEN SUBSTR(P_money,1,1)||'元' ELSE '元' END)||
					(CASE WHEN SUBSTR(P_money,4,1)<>'0' THEN SUBSTR(P_money,4,1)||'角' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,5,1)<>'0' THEN SUBSTR(P_money,5,1)||'分' ELSE '' END)
		WHEN LENGTH(P_money)=6/*佰*/
		 THEN (CASE WHEN SUBSTR(P_money,1,1)<>'0' THEN SUBSTR(P_money,1,1)||'佰' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,2,1)<>'0' THEN SUBSTR(P_money,2,1)||'拾' 
					ELSE (CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN '零' ELSE '' END)  END)||
		            (CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN SUBSTR(P_money,3,1)||'元' ELSE '元' END)||
					(CASE WHEN SUBSTR(P_money,5,1)<>'0' THEN SUBSTR(P_money,5,1)||'角' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,6,1)<>'0' THEN SUBSTR(P_money,6,1)||'分' ELSE '' END)
		 WHEN LENGTH(P_money)=7/*仟*/
		 THEN  (CASE WHEN SUBSTR(P_money,1,1)<>'0' THEN SUBSTR(P_money,1,1)||'仟' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,2,1)<>'0' THEN SUBSTR(P_money,2,1)||'佰' 
					ELSE (CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN '零' ELSE '' END) END)||
					(CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN SUBSTR(P_money,3,1)||'拾' 
					ELSE (CASE WHEN SUBSTR(P_money,4,1)<>'0' THEN '零' ELSE '' END) END)||
		            (CASE WHEN SUBSTR(P_money,4,1)<>'0' THEN SUBSTR(P_money,4,1)||'元' ELSE '元' END)||
					(CASE WHEN SUBSTR(P_money,6,1)<>'0' THEN SUBSTR(P_money,6,1)||'角' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,7,1)<>'0' THEN SUBSTR(P_money,7,1)||'分' ELSE '' END)
		 WHEN LENGTH(P_money)=8/*万*/
		 THEN  (CASE WHEN SUBSTR(P_money,1,1)<>'0' THEN SUBSTR(P_money,1,1)||'万' ELSE '' END)|| 
		            (CASE WHEN SUBSTR(P_money,2,1)<>'0' THEN SUBSTR(P_money,2,1)||'仟' 
					ELSE (CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN '零' ELSE '' END) END)||
					(CASE WHEN SUBSTR(P_money,3,1)<>'0' THEN SUBSTR(P_money,3,1)||'佰' 
					ELSE (CASE WHEN SUBSTR(P_money,4,1)<>'0' THEN '零' ELSE '' END) END)||
					(CASE WHEN SUBSTR(P_money,4,1)<>'0' THEN SUBSTR(P_money,4,1)||'拾' 
					ELSE (CASE WHEN SUBSTR(P_money,5,1)<>'0' THEN '零' ELSE '' END) END)||
		            (CASE WHEN SUBSTR(P_money,5,1)<>'0' THEN SUBSTR(P_money,5,1)||'元' ELSE '元' END)||
					(CASE WHEN SUBSTR(P_money,7,1)<>'0' THEN SUBSTR(P_money,7,1)||'角' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,8,1)<>'0' THEN SUBSTR(P_money,8,1)||'分' ELSE '' END)
		WHEN LENGTH(P_money)=9/*十万*/
		 THEN  (CASE WHEN SUBSTR(P_money,1,1)<>'0' THEN SUBSTR(P_money,1,1)||'拾' ELSE '' END)||
					(CASE WHEN SUBSTR(P_money,2,1)<>'0' THEN SUBSTR(P_money,2,1)||'万' 
					ELSE (CASE WHEN SUBSTR(P_money,3,3)<>'000' AND SUBSTR(P_money,3,1)<>'0' 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值