Oracle 分开的美分和美元价值

Oracle 分开的美分和美元价值,oracle,oracle11g,Oracle,Oracle11g,我是oracle查询新手,我想得到一些帮助,因为我完全被卡住了 我有一个产品表,其中包含产品id、价格和产品名称: 我想使用select oracle查询将产品的价格分为美元和美分 我不知道该如何计算,但我尝试了TRUNC函数,但仍然无法获得美分值 你能帮帮我吗 以下是DB表: CREATE TABLE Products ( ProductID int, Price varchar(255), ProductName varchar(255) ); INSERT INTO

我是oracle查询新手,我想得到一些帮助,因为我完全被卡住了

我有一个产品表,其中包含产品id、价格和产品名称: 我想使用select oracle查询将产品的价格分为美元和美分

我不知道该如何计算,但我尝试了TRUNC函数,但仍然无法获得美分值

你能帮帮我吗

以下是DB表:

CREATE TABLE Products (
    ProductID int,
    Price varchar(255),
    ProductName varchar(255)
);
INSERT INTO Products VALUES (1,5.17,'Apple');
INSERT INTO Products VALUES (2,6.527,'Orange');
INSERT INTO Products VALUES (3,7.12,'Watermelon');
INSERT INTO Products VALUES (4,3.25,'Pear');
INSERT INTO Products VALUES (5,4.123,'Grape');
感谢您的帮助:

查询:

输出:

产品ID 美元 美分 产品 1. 5. 17 苹果 2. 6. 527 橙色 3. 7. 12 西瓜 4. 3. 25 梨 5. 4. 123 葡萄 这是你需要的

select substr(price, 1, instr(price, '.')-1) dollars, substr(price, instr(price, '.')+1) cents,  round(substr(price, instr(price, '.')),2)* 100 cents_rounded
from products
价格为VARHCAR2?为什么?它应该是一个数字,因为它是一个数值。在这种情况下:

SQL> desc products
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 PRODUCTID                                          NUMBER(38)
 PRICE                                              NUMBER
 PRODUCTNAME                                        VARCHAR2(255)

SQL> SELECT productid,
  2         productname,
  3         price,
  4         --
  5         TRUNC (price) dollars,
  6         (price - TRUNC (price)) * 100 cents
  7    FROM products;

 PRODUCTID PRODUCTNAM      PRICE    DOLLARS      CENTS
---------- ---------- ---------- ---------- ----------
         1 Apple            5,17          5         17
         2 Orange          6,527          6       52,7
         3 Watermelon       7,12          7         12
         4 Pear             3,25          3         25
         5 Grape           4,123          4       12,3

SQL>
使用TRUNC获取美元值,使用MOD modulo获取美分值:

选择ProductID, 产品名称, 以美元表示的特鲁克价格, MOD价格,1*100美分 来自产品 对于您的示例数据,输出:


DBFIDLE

这是错误的,因为橙色不是6美元527美分。是的,我知道我认为这一切都是关于如何做到这一点,而不是他/她面临的主要问题。添加了美分四舍五入,你不需要四舍五入,可以得到精确的美分值,包括小数点。@MT0然后它会复制你的答案,我不希望这样做;它将获得与我的答案相同的输出,但将使用不同的方法字符串函数和算术函数。获得相同的输出并展示不同的实现方法并不存在剽窃。将价格放入字符串varchar是一个致命的设计缺陷。修正你的表格,使价格以数字的形式正确输入,具有适当的比例和精度。在oracle中,当您正确地将数据元素键入字符串时,它应该是VARCHAR2,而不是VARCHAR。
SQL> desc products
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 PRODUCTID                                          NUMBER(38)
 PRICE                                              NUMBER
 PRODUCTNAME                                        VARCHAR2(255)

SQL> SELECT productid,
  2         productname,
  3         price,
  4         --
  5         TRUNC (price) dollars,
  6         (price - TRUNC (price)) * 100 cents
  7    FROM products;

 PRODUCTID PRODUCTNAM      PRICE    DOLLARS      CENTS
---------- ---------- ---------- ---------- ----------
         1 Apple            5,17          5         17
         2 Orange          6,527          6       52,7
         3 Watermelon       7,12          7         12
         4 Pear             3,25          3         25
         5 Grape           4,123          4       12,3

SQL>
PRODUCTID | PRODUCTNAME | DOLLARS | CENTS --------: | :---------- | ------: | ----: 1 | Apple | 5 | 17 2 | Orange | 6 | 52.7 3 | Watermelon | 7 | 12 4 | Pear | 3 | 25 5 | Grape | 4 | 12.3