首先的确是得吐槽一下这个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'