0

我有一个包含“描述”列的表,该列具有以下值:

  • OPTestMachine
  • OP手动测试
  • OP1010

因此,要获取值的 select 语句将是

SELECT description
  FROM operation;

我想提取数字“1010”(或任何与 substr() 标准匹配的字符串)并尽可能将“找到的字符串”转换为整数。

所以我想出了这个:

SELECT to_number(substr(description, 3, 4))
  FROM operation
 WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')

结果很简单:“1010”

这对我来说效果很好。

现在对我来说最困难的部分:我想在 WHERE 子句中使用 substr()-result

像这样的东西:

 SELECT to_number(substr(description, 3, 4))
   FROM operation
  WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')
    AND substr(description, 3, 4) < 2000;

当我这样做时,我收到错误“无效号码”。我想这是因为服务器解析 select 语句的顺序。

如果你能提供任何帮助,那就太好了!!

4

2 回答 2

3

substr函数返回一个字符串,您必须像在 select 语句中那样将其显式转换为数字: AND to_number(substr(description, 3, 4)) < 2000;

于 2016-10-27T14:01:06.743 回答
0
 SELECT to_number(substr(description, 3, 4))
   FROM operation
  WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')
    AND to_number(substr(description, 3, 4)) < 2000;

第二个 to_number 有帮助吗?

如果不是,我会这样做:

select to_number(x) from (
SELECT substr(description, 3, 4) x
       FROM operation
      WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', ''))
        WHERE to_number(x) < 2000;
于 2016-10-27T14:00:00.910 回答