PostGreSQL:货币类型

货币类型:money    

    money类型存储固定小数精度的货币数字,小数的精度由数据库的lc_monetary设置决定。windows系统下,该配置项位于/data/postgresql.conf文件中,默认配置如下,

lc_monetary = 'Chinese (Simplified)_China.936'            # locale for monetary formatting

货币类型输入输出格式

        可接受的输入格式很多,包括整数和浮点数文字,以及常用的货币格式,如'$1,000.00'。 输出通常是最后一种形式,但和区域相关。也就是说:money这种数据类型的输出格式是和区域相关的。例如:上述配置对应于中国区域,那么货币的输出格式就为:

SELECT id,name,money FROM "tb_account"
ORDER BY id

        查询结果如下,

        因此将money数据装入到一个具有不同lc_monetary设置的数据库是不起作用的。为了避免这种问题,在恢复一个转储到一个新数据库中之前,应确保新数据库的lc_monetary设置和被转储数据库的相同或者具有等效值。

货币类型与其它数据类型相互转换

        在实际开发中,我们经常接触到的金额数值一般为小数类型,但是,PostGreSQL货币类型由于输出格式带有前缀$或者¥,显然是无法直接映射到Double/Float/Int等数值类型的,尤其是在使用MyBatis框架时。

        为了解决这类问题,PostGreSQL提供了类型转换的实现方式。

其它类型转货币类型

        数据类型numericintbigint的值可以被造型成money。从数据类型realdouble precision的转换可以通过先造型成numeric来实现,例如:

SELECT '12.34'::float8::numeric::money;

        对应于MyBatis框架,使用方式如下,

  <update id="update" parameterType="com.example.demo.demos.pojo.Account">UPDATE tb_account<trim prefix="SET" suffixOverrides=","><if test="account.name != null and account.name != ''">name = #{account.name},</if><if test="account.money != null">money = #{account.money}::float8::numeric::money,</if></trim>WHERE id = #{account.id}</update>

货币类型转其它类型

        一个money值可以在不损失精度的情况下被造型成numeric。转换到其他类型可能会丢失精度,并且必须采用两个阶段完成:

SELECT '52093.89'::money::numeric::float8;

        对应于MyBatis框架,使用方式如下,

<select id="selectList" resultType="com.example.demo.demos.pojo.Account">SELECT id,name,money::money::numeric::float8 as moneyFROM tb_account
</select>

        tb_account表对应的pojo实体类定义如下,

package com.example.demo.demos.pojo;import java.io.Serializable;public class Account implements Serializable {private static final long serialVersionUID = 3327456920493219212L;/*** id-主键*/private Integer id;/*** name-账户名*/private String name;/*** money-金额*/private Double money;//setterpublic void setId(Integer id) {this.id = id;}public void setName(String name) {this.name = name;}public void setMoney(Double money) {this.money = money;}//getterpublic Integer getId() {return id;}public String getName() {return name;}public Double getMoney() {return money;}//constructorpublic Account() {}public Account(Integer id, String name, Double money) {this.id = id;this.name = name;this.money = money;}//methods@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +'}';}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的一些零散小知识

文章目录 1、空指针nullptr的类型为std::nullptr_t2、函数定义中&#xff0c;如果不需要使用参数的值&#xff0c;可以省略参数名3、静态成员变量在C17之后可以直接在类内定义并初始化了 1、空指针nullptr的类型为std::nullptr_t 一个毫无意义的例子&#xff1a; template<…

LeetCode258. Add Digits

文章目录 一、题目二、题解 一、题目 Given an integer num, repeatedly add all its digits until the result has only one digit, and return it. Example 1: Input: num 38 Output: 2 Explanation: The process is 38 --> 3 8 --> 11 11 --> 1 1 --> 2 S…

【Oracle】修改表结构

目录 创建示例1&#xff1a;添加一个或多个列 创建示例2&#xff1a;修改列定义 创建示例3&#xff1a; 删除一列或多列 创建示例4:重命名列 创建示例5:重命名表 创建示例1&#xff1a;添加一个或多个列 -----语法&#xff1a;将新列添加到表中 ALTER TABLE table_name A…

了解米勒-拉宾素性测试算法

引言 素数在密码学、计算机科学和数学领域有着重要的应用。米勒-拉宾素性测试算法是一种用来判断一个数是否为素数的概率性算法,本文将介绍该算法的原理、实现以及应用。 素数及其重要性 在数学中,素数(质数)指的是只能被 1 和自身整除的自然数,如 2、3、5、7 等。素数…

大模型工具_QUIVR

https://github.com/StanGirard/quivr/ 24.5K Star 1 功能 整体功能&#xff0c;想解决什么问题 实现了前后端结合的 RAG 方案。构建能直接使用的应用。提出了“第二大脑”&#xff0c;具体实现也是RAG&#xff0c;但针对不同用户不同场景支持多个“大脑”并存&#xff0c;每个…

css 三角形实现方式及快速联想记忆

css实现三角形是常见的需求&#xff0c;在此记录如下 1 边框实现 原理&#xff1a;相邻的border之间会形成一条斜线(可按此联想记忆) .triangle {width: 0;height: 0;border-left: 100px solid red;border-right: 100px solid green;border-top: 100px solid blue;border-bot…

Spring Boot实践指南

一.SpringBoot入门案例 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程 原生开发SpringMVC程序过程 在没有SpringBoot前&#xff1a; 1.入门案例开发步骤 &#xff08;1&#xff09;创建新模块&#xff0c;选…

模式识别与机器学习(九):Adaboost

1.原理 AdaBoost是Adaptive Boosting&#xff08;自适应增强&#xff09;的缩写&#xff0c;它的自适应在于&#xff1a;被前一个基本分类器误分类的样本的权值会增大&#xff0c;而正确分类的样本的权值会减小&#xff0c;并再次用来训练下一个基本分类器。同时&#xff0c;在…

PADS Layout安全间距检查报错

问题&#xff1a; 在Pads Layout完成layout后&#xff0c;进行工具-验证设计安全间距检查时&#xff0c;差分对BAK_FIXCLK_100M_P / BAK_FIXCLK_100M_N的安全间距检查报错&#xff0c;最小为3.94mil&#xff0c;但是应该大于等于5mil&#xff1b;如下两张图&#xff1a; 检查&…

数据结构-如何巧妙实现一个栈?逐步解析与代码示例

文章目录 引言1.栈的基本概念2.选择数组还是链表&#xff1f;3. 定义栈结构4.初始化栈5.压栈操作6.弹栈操作7.查看栈顶和判断栈空9.销毁栈操作10.测试并且打印栈内容栈的实际应用结论 引言 栈是一种基本但强大的数据结构&#xff0c;它在许多算法和系统功能中扮演着关键角色。…

机器学习的一些有趣的点【异常检测】

机器能不能知道自己不知道&#xff0c;而不是给出判断中的一种&#xff1f; Classifier&#xff08;分类&#xff09;Anomaly Detection&#xff08;异常检测&#xff09; 机器能不能说出为什么知道&#xff1f; 有时候可能是因为数据的问题导致了这种错觉。 机器学习是否会有错…

【Linux基本命令】

文章目录 一. Linux基本命令第三回二. 结束语 一. Linux基本命令第三回 cal指令&#xff0c;命令格式&#xff1a;cal 【参数】【月份】【年份】 功能&#xff0c;用于查看日历等时间信息&#xff0c;如只有一个参数&#xff0c;则表示年份&#xff0c;有两个参数则表示月份和…

为什么要使用vite

vue ——&#xff09;webpack 全部读取完毕才显示&#xff1a; vite:只读取修改的部分&#xff0c;速度比较快

canvas入门笔记(上)

Canvas Canvas简介 Canvas API 提供了一个通过JavaScript 和 HTML的元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas API 主要聚焦于 2D 图形。而同样使用<canvas>元素的 WebGL API 则用于绘制硬件加速的 2D 和…

【JMeter】JMeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就不…

python13

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

设计模式-结构型模式

适配者模式 现有的系统放置在新环境中&#xff0c;新环境要求的接口是现对象不能满足的/系统需要使用现有的类&#xff0c; 此类的接口不符合系统的要求&#xff1b;适配器继承或者依赖已有的对象&#xff0c;实现想要的目标接口 桥接模式 用继承会造成类爆炸问题&#xff0c;扩…

二级指针使用

在c和c中如果我们想使用指针指向或者使用指针变量存放另外一个指针的地址&#xff0c;最容易想到的是再定义一个指针来存放&#xff1a; 例&#xff1a; int a 10; int * p &a; int *p1 &p; // 这种定义方法理论上是可行的,但是c和c中是不允许的,存放指针变量 …

方法论系列:数据科学框架入门

目录 第一章 - 数据科学家如何战胜困难第二章 - 数据科学框架第三章 - 步骤1&#xff1a;定义问题和步骤2&#xff1a;收集数据第四章 - 步骤3&#xff1a;准备数据第五章 - 数据清洗的4个C&#xff1a;纠正、补全、创建和转换第六章 - 步骤4&#xff1a;使用统计学进行探索性…

融资项目——swagger2的注解

1. ApiModel与ApiModelProperty(在实体类中使用) 如上图&#xff0c;ApiModel加在实体类上方&#xff0c;用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方&#xff0c;用于对属性进行描述。swagger2网页上的效果如下图&am…