0

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

Select cast(VERSION as int)由于这两个值中包含第二个值而被轰炸.

4

3 回答 3

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)
于 2018-04-10T18:06:54.413 回答
0

regexp_substr您可以通过使用with \dpattern得出:

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;
于 2018-05-28T06:20:30.923 回答
0

对于 Oracle,您必须将值作为字符串处理,以便仅取消点之前的部分。前任:

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

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

于 2018-04-10T18:15:23.967 回答