将单个数据库列中的两个值相乘

时间:2014-02-20 18:37:39

标签: sql oracle subquery

我有一些数据如下:

Name             Processors
dab1             8x10 - 1.06 GHz
bac3             2x6 - 2.4 GHz
abc1             4x8 - 2 GHz
cab2             2x4 - 1.2 GHz

在'处理器'列中,我需要能够将第一个数字和第二个数字相乘(例如:8 * 10 = 80,2 * 6 = 12等)以检查条件。

示例查询:

SELECT * FROM HOST_TABLE WHERE COMPUTED_PROCESSOR_VALUE > 16

如何计算此值?数字之间总是有一个“x”,但数字可以是单数字或双数字。

谢谢!

2 个答案:

答案 0 :(得分:1)

SQL Fiddle

SELECT m.Name, m.Processors FROM
(
  SELECT Name, Processors, SUBSTR(Processors, 1, INSTR(Processors, 'x', 1, 1)-1) AS FirstValue,
  SUBSTR(Processors, INSTR(Processors, 'x', 1, 1) + 1, INSTR(Processors, ' ', 1, 1) - INSTR(Processors, 'x', 1, 1)) AS SecondValue
  FROM MyTable
) m 
WHERE m.FirstValue * m.SecondValue > 16

答案 1 :(得分:0)

使用正则表达式,您的查询看起来类似于:

SELECT TO_NUMBER(REGEXP_SUBSTR(
           processors, '^[:digit:]{1,2}')) * 
       TO_NUMBER(REGEXP_SUBSTR(
           processors, '[:digit:]{1,2})', INSTR(processors, 'x'))) 
       AS computed_processor_value 
FROM host_table 
WHERE computed_processor_value > 16;

我现在无法测试它,但它应该让你开始。

Oracle 10.1g的参考资料(如有必要,请调整您的版本):

REGEXP_SUBSTR

Multilingual Regular Expression Syntax