【问题标题】:SQL Datatype to use when inserting money存钱时使用的 SQL 数据类型
【发布时间】:2015-05-14 21:00:51
【问题描述】:

我正在使用 Oracle SQL 数据库,我必须插入一个货币值(工资)作为一行的一部分。由于某种奇怪的原因,money 命令不起作用,是否有任何替代方法可以解决这个问题?

数据输入格式:00,000.000 英镑

CREATE TABLE staff
                   (staffno CHAR(6) NOT NULL
                    , staffsurname VARCHAR(8) NOT NULL
                    , staffforename VARCHAR(7) NOT NULL
                    , salary MONEY NOT NULL
                    , PRIMARY KEY (staffno)
                   );

【问题讨论】:

  • Oracle,我很抱歉 - 修复了标签。
  • Oracle 建议对字符串使用varchar2() 而不是varchar() 作为注释。

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

看看这一行

salary MONEY NOT NULL

没有现有的货币数据类型。

如果您正在寻找类似于SQL-Server 小钱类型的东西,您想使用Number(10,4),然后格式化数字。

您可以使用to_char 函数格式化数字

select to_char(yourColumn, '$99,999.99') from yourTable where someCondition

【讨论】:

  • 这个应用程序没有前端,只是构建数据库(我是学生所以它只是在练习使用 oracles iacademy)所以我无法解析字符串。
  • 例如,如果我的输入是:45,000.00 英镑。它可以使用 VARCHAR(7,2) 吗?
  • @user3686991 varchar 没有十进制类型,只有字符。
  • 如果您想存储带有符号和逗号等的数据,您可以将其存储为varchar(15)。请注意,15 可能不是正确的长度,请将其更改为您想要允许的任何限制。
  • 我认为使用VARCHAR(实际上是VARCHAR2,因为它是Oracle)是个坏主意。它几乎可以排除对该列进行范围查询。
【解决方案2】:

“奇怪”的原因很简单:There is no MONEY data type

最适合货币值的数据类型是NUMBER(使用适当的刻度)。由于它是 decimal 浮点类型,因此它比 binary 浮点类型 BINARY_FLOATBINARY_DOUBLE 更适合货币值。

但请注意,您仍需要在前端解析输入字符串£00,000.000,并将其作为数值发送到后端。

【讨论】:

  • 好的,插入 00,000.00 英镑的货币价值的正确格式是什么?
  • 货币价值为零就是0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2021-04-17
  • 2017-12-27
  • 2010-10-10
  • 2012-09-16
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多