首页 > 数据库 >金额转换pgsql存储过程

金额转换pgsql存储过程

时间:2024-02-04 13:55:26浏览次数:24  
标签:10 存储 转换 value pgsql amount words END unit

CREATE OR REPLACE FUNCTION amount_to_words(amount NUMERIC, currency TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS $$
DECLARE
units TEXT[] = ARRAY['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
teens TEXT[] = ARRAY['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
tens TEXT[] = ARRAY['', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
thousands TEXT[] = ARRAY['', 'thousand', 'million', 'billion', 'trillion'];
words TEXT := '';
remaining_amount NUMERIC;
place INTEGER;
unit_value INTEGER;
tens_value INTEGER;
hundreds_value INTEGER;
BEGIN
IF amount = 0 THEN
RETURN units[1];
END IF;

FOR place IN 0..CEILING(LOG(10, amount)) LOOP
unit_value := floor(amount / (10 ^ place));
remaining_amount := amount % (10 ^ place);

IF unit_value > 0 THEN
hundreds_value := floor(unit_value / 100);
tens_value := floor((unit_value % 100) / 10);
IF hundreds_value > 0 THEN
words := units[hundreds_value] || ' hundred ' || words;
END IF;

IF tens_value > 1 THEN
words := tens[tens_value] || ' ' || words;
ELSIF tens_value = 1 THEN
words := teens[unit_value % 10] || ' ' || words;
END IF;

IF unit_value % 10 > 0 THEN
words := units[unit_value % 10] || ' ' || words;
END IF;

words := thousands[place + 1] || ' ' || words;
END IF;

amount := remaining_amount;
END LOOP;

words := regexp_replace(words, '\s+', ' ', 'g') || ' ' || currency;
RETURN words;
END;
$$;

标签:10,存储,转换,value,pgsql,amount,words,END,unit
From: https://www.cnblogs.com/geforce/p/18006061

相关文章

  • 进制转换(二、八、十六进制之间的转化和进制前后缀)
    本篇默认你至少掌握了十进制(整数及小数)与二进制之间的互相转换,如果还不太熟悉,可以看看我的这篇博客《二进制详解——从18元的生椰拿铁入手理解二进制》哦~!目录二进制↔️八进制二进制↔️十六进制八进制↔️十六进制进制的前后缀二进制↔️八进制八进制的数码是0-7,最大的7是......
  • dremio 官方一篇关于使用了到的技术进行对象存储查询加速的博客
    dremio官方发布了一篇新博客是关于如何实现对象存储的快速查询的使用的技术主要是apchearrow,reflections,columnarcloudcache(c3)说明博客内容很简单,主要是进行了一个介绍,详细的可以看看里边的内容,同时里边包含了不少链接值得学习下参考资料https://docs.dremio.com/......
  • 天地伟业接入视频汇聚/云存储平台EasyCVR详细步骤
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的......
  • 开发中为什么不建议使用 存储过程
    开发中,为什么不建议使用存储过程?存储过程是数据库管理系统中预编译的程序单元,它允许在数据库内直接执行一系列SQL语句。尽管存储过程有其优势(如减少网络传输、提高效率、封装业务逻辑等),但在特定情况下,它们也存在一些争议点:可移植性:存储过程通常是与特定数据库引擎紧密相关的,这......
  • 金蝶云星空业务对象添加网络互控存储在哪些表
    一、【网控操作列表】确定后数据写入 --业务对象的操作列表《网络控制对象》主表SELECT*FROMT_BAS_NETWORKCTRLOBJECTWHEREFMETAOBJECTID='XXXX_AS_AfterOrder';--《网络控制对象》多语言 SELECT*FROMT_BAS_NETWORKCTRLOBJECT_LWHEREfidIN(SELECTFIDFROM......
  • Java 数据类型详解与类型转换技巧
    Java数据类型Java中的变量必须是指定的数据类型:intmyNum=5;//整数floatmyFloatNum=5.99f;//浮点数charmyLetter='D';//字符booleanmyBool=true;//布尔值StringmyText="Hello";//字符串数据类型分为两组:......
  • 在k8s中,有哪些存储?
    在Kubernetes(简称K8s)中,有多种内置和外部的存储解决方案,它们可以满足不同场景下的持久化存储需求。以下是一些常见的存储类型:PersistentVolume(PV):PersistentVolume是集群管理员创建并提供的存储资源,它具有一定的容量和访问模式。PersistentVolumeClaim(PVC):用户通......
  • Java将密码加盐加密存储和校验
    注册和登陆的时候,需要加密和校验,以下为加密和解密代码packageorg.ongoal.common.config;importorg.springframework.util.DigestUtils;importorg.springframework.util.StringUtils;importjava.util.UUID;publicclassPasswordUtil{/***加盐算法->格......
  • Linux批量转换图片文件(png/jpg)
    ImageMagick转换图片一、convert命令Version:ImageMagick6.9.11-60Q16x86_642021-01-25https://imagemagick.orgCopyright:(C)1999-2021ImageMagickStudioLLCLicense:https://imagemagick.org/script/license.phpFeatures:CipherDPCModulesOpenMP(4.5)Delega......
  • 在 C# 中,`int[]`(数组)和 `List<int>`(列表)都可以用来存储一组整数,但它们有一些重要的区
    在C#中,int[](数组)和List<int>(列表)都可以用来存储一组整数,但它们有一些重要的区别:大小:int[]的大小在创建时就确定了,不能改变。而List<int>的大小是动态的,可以添加或删除元素,大小会自动调整¹。方法:List<int>提供了许多方便的方法,如Add、Remove、Insert等,而int[]没有这些方......