ORA-01722:无效数字 - 带有两位小数的值

时间:2018-04-10 17:47:02

标签: sql regex oracle regexp-substr ora-01722

我试图从文本字段中获取最大值。除了两个值之外的所有值都是带有一个小数的数字。但是,其中两个值类似8.2.10。我怎样才能拉回整数值?值可以高于9.n,因此我需要将此字段转换为数字,以便我可以获得返回的最大值。所以我想回来的只是8中的8.2.1

Select cast(VERSION as int)正在轰炸,因为这两个值中包含第二个.

3 个答案:

答案 0 :(得分:0)

我不得不使用T-SQL而不是PL / SQL,但想法是一样的:

DECLARE @s VARCHAR(10);
SELECT @s='8.2.1';
SELECT CAST(LEFT(@s, CHARINDEX('.', @s) - 1) AS INT);

返回整数8 - 请注意,如果没有点,它将无法工作,因为它将字符串的一部分带到第一个点的左边。

如果我快速查看等效函数是正确的,那么在Oracle中最终会得到:

SELECT CAST(SUBSTR(VERSION, 1, INSTR(VERSION, '.') - 1) AS INT)

答案 1 :(得分:0)

对于Oracle,您必须将值作为字符串参加,以便仅退出点之前的部分。例如:

SELECT NVL( SUBSTR('8.2.1',0, INSTR('8.2.1','.')-1),'8.2.1') AS SR FROM DUAL;

检查该值是否在句子中重复3次,如果该值为零或该值没有小数部分,则它将返回设置的值。

答案 2 :(得分:0)

您可以使用regexp_substr \d模式

来推导
with tab as
(
 select regexp_substr('8.2.1', '\d', 1, 1) from dual
 union all
 select regexp_substr('9.0.1', '\d', 1, 1) from dual
)
select * from tab;