【SQL】金额如果存在数据库中应该使用何种类型?
发布网友
发布时间:2022-04-24 03:12
我来回答
共6个回答
热心网友
时间:2022-04-09 11:48
在工作中发现原本系统中金额类型(int 10,存入数据库时乘100)已经不能满足当前需求,需要重新修改类型。于是像技术总监发起两次审批,但都被驳回了。第一次金额类型为 DECIMAL(32,8) , 第二次类型是 DECIMAL(10,2),之后技术总监说,你第一次的类型可能是对的,于是小彭百思不得其解,引发以下的灵魂三问......
为什么系统期初设置金额时要用 int 10 类型?
为什么两次审批都被驳回?
为什么后来技术总监又说第一次的可能是对的?
简单思考过后:小彭,大胆的推测了第一个问题,可能是当初设计数据结构时,认为金额精确到分即可,所以默认乘100 (保留两位小数)。但金额最大为 9千万元,是否真的能符合要求,回头还得再问问技术总监。这时,小彭又想到两个问题:
既然是保留小数了,为什么还要用 INT 类型呢?
如果说 FLOAT和 DOUBLE类型可能会存在精度问题,又为什么不用 DECIMAL类型呢?
经过查阅博客之后:小大概想通了第二个问题,第一次被驳回的原因是:DECIMAL类型在数据库中是根据传入的数值来决定存储的字节长度的,32明显过长会导致磁盘空间的浪费。而第二次则是走了另外一个极端:原本长度为10已经快要满足不了需求的了,如果再修改为同样的长度意义不大,还会引起后续再次修改类型的情况。
又结合系统反思了一下:大概明白了第三个问题,至于金额的长度其实是没有没有一个具体的标准的,要根据具体业务情况,预估最大的金额上限,再决定具体长度。
意料之外的惊喜,在看书籍中意外的解决了第二组的两个问题。 由于CPU不支持对 DECIMAL 的 直接计算,所以在计算的过程中需要额外的空间及计算开销,导致性能过慢。还存在另外一种解决方案:使用 BIGINT 代替 DECIMAL,在计算时,可以乘或除以相应的倍数即可,来取代 DECIMAL 计算代价高的问题。
最后总结:
FLOAT和 DOUBLE类型会存在精度问题,是因为十进制0.1在电脑里用二进制是无法精确表示的。
DECIMAL类型在数据库中存储的字节长度计算公式:对decimal(M,D) ,如果M>D,长度为M+2,否则为D+2。
要根据具体业务情况,预估最大的金额上限,再决定具体长度。
DECIMAL 计算的过程中需要额外的空间及计算开销,性能低。
热心网友
时间:2022-04-09 13:06
一般用money或decimal或numeric,而不用float或double,因为容易出现"失真".
money货币数据存储的精确度为四位小数。可以存储在 money 数据类型中的值的范围是 -922,337,203,685,477.5808 至 +922,337,203,685,477.5807(需 8 个字节的存储空间)。
在 SQL Server中,numeric 数据类型等价于 decimal 数据类型。存储 decimal 或 numeric 数值所需的字节数取决于该数据的数字总数和小数点右边的小数位数。
热心网友
时间:2022-04-09 14:40
一般用money或decimal或numeric,而不用float或double,因为容易出现"失真".
money货币数据存储的精确度为四位小数。可以存储在 money 数据类型中的值的范围是 -922,337,203,685,477.5808 至 +922,337,203,685,477.5807(需 8 个字节的存储空间)。
在 SQL Server中,numeric 数据类型等价于 decimal 数据类型。存储 decimal 或 numeric 数值所需的字节数取决于该数据的数字总数和小数点右边的小数位数。
热心网友
时间:2022-04-09 16:32
int varchar 都可以 输出时做个格式化
热心网友
时间:2022-04-09 18:40
看你的精度了。一般money decimal 都可以
热心网友
时间:2022-04-09 21:04
number(p,s)
精确到小数点后面s位
【SQL】金额如果存在数据库中应该使用何种类型?
一般用money或decimal或numeric,而不用float或double,因为容易出现"失真".money货币数据存储的精确度为四位小数。可以存储在 money 数据类型中的值的范围是 -922,337,203,685,477.5808 至 +922,337,203,685,477.5807(需 8 个字节的存储空间)。在 SQL Server中,numeric 数据类型等价于 decimal ...
sql server 货币 字段 类型 一般用什么类型?
货币的字段类型一般有int,float,money/smallmoney,decimal/numberic。根据存储数据的精度不同选择:int只能存储整数的钱。money/smallmoney 数据类型精确到它们所代表的货币单位的万分之一 。decimal/numberic 可以自定义小数位和能存储的数据精度, 所以一般使用这种类型的人会多一些。float 对货币这种需要...
SQL 数据库的类型有哪些?
SQL 数据库分为:系统数据类型和用户自定义类型 系统数据类型:整形(int\smallint\tinyint)\浮点数据(real\decimal和numeric)\字符(char\varchar\nchar\nvarchar)\日期和时间数据类型(datetime\smalldatetime)\文本和图形数据类型(text\ntext\image)\货币数据类型(money\smallmoney)\位数据类型\二进制数据类型...
在SQL数据库中,设置了一个字段的类型为money,但是money类型数据保留的...
1、直接型,通过ToString()函数直接格式化。例如把money = 12345.67 格式成 money = 12,345.67。代码如下:string _money = moeny.ToString("N")或者string _moeny = money.ToString("#,###.00")2、本地化型,通过CultureInfo类,根据指定的文化进行格式化,同样的,代码如下:double money = 1...
sql数据库都有哪几种数据类型?常用都有哪几种?用select语句查询的时 ...
select语句数值用引号,字段名,表名等对象用括号,数据类型有char,int,double, float,decimal,nchar,varchar,text,nvarchar,常用的有int,float,varchar,text
sql中存储较大的数据用什么数据类型?或者存储较大的数据 怎么存储
整数用这个:int 整型 int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节 带精度的用这个:decimal 精确数值型 decimal 数据类型能用来存储从-1038-1到1038-1的固定精度和...
sql 中的数据类型有那些?请讲明白些
数据类型 在Microsoft® SQL Server™ 中,每个列、局部变量、表达式和参数都有一个相关的数据类型,这是指定对象可持有的数据类型(整型、字符、money 等等)的特性。SQL Server 提供系统数据类型集,定义了可与 SQL Server 一起使用的所有数据类型。下面列出系统提供的数据类型集。 可以定义用户定义的数据类型,其是...
sql数据类型有什么用sql数据类型有什么用途
各种数据类型的sql含义bitintegerbit数据类型为integer,其值只能为0、1或空。此数据类型用于存储只有两个可能值的数据,如Yes或No、True或False、on或Offintintegerint数据类型可以存储从-231(-2147483648)到231(2147483647)的整数。几乎所有存储在数据库中的数字数据都可以使用这种数据类型。这种数据类型在数据库中占用4...
SQL数据库中那个类型可以存储负数,比如说存储-50? 如果不能存储。用...
数据库中一般的数字类型都可以存储负数,如int,numeric,decimal等。工具:sqlserver 2008 R2 步骤:1、以int类型为例,首先创建一个表:2、在表中分别插入正数、负数和零。3、执行后结果:大型文本数据可以采用文本或图形二进制的数据类型:1、TEXT TEXT数据类型用于存储大量文本数据,其容量理论上为1 ...
mysql数据库中有几种数据类型
如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647 的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。MySQL数据类型之四逻辑型 BIT 如果你使用复选框( CHECKBOX)从网页中搜集信息,你可以把此信息存储...