如何截断字符串中的最后两个字母并在 Oracle 中转换为数字?

How to truncate last two letters in a string and convert to number in Oracle?

我有一个 Oracle table 将列 'Received Quantity' 显示为字符串。如何删除该字符串中的最后两个字母并将其余字母转换为数字?

Select receipt_number
      ,item_name
      ,received_quantity
from item_table

结果是:

+-----------+----------+-------+
|    Rcpt 01|Kool GLue |234CS  |
+-----------+----------+-------+
|    Rcpt 02|Red GLue  |10CS   |
+-----------+----------+-------+
|    Rcpt 03|Bad GLue  |1000CS |
+-----------+----------+-------+

我需要有关代码的帮助,以删除字段中的 'CS' 并将数字转换为数字,然后计算所有这些数字的总和。

最后,我想计算所有这些项目的案例数总和。

我正在尝试的代码是:

Select receipt_number
      ,item_name
      ,SUM (to_number(cast(received_quantity, -2)))
from item_table
group by receipt_number, item_name

您可以使用 SUBSTRING 所以答案可以是:

Select receipt_number
  ,item_name
  ,SUM (to_number(cast(SUBSTR(received_quantity, 1, LENGTH(received_quantity) - 2), -2)))

from item_table

group by receipt_number, item_name

我就是这样做的

Select receipt_number
      ,item_name
      , SUM(TO_NUMBER(TRIM(REPLACE(received_quantity,'CS'))))

from item_table

group by receipt_number, item_name

还有很多

最可靠的方法是使用 regexp_replace():

简单地删除任何不是数字的字符
Select receipt_number,
       item_name,
       SUM(to_number(regexp_replace(received_quantity, '[^0-9]', ''))) as quantity
from item_table
group by receipt_number, item_name;

这也将清理像 CS1234

这样的字符串