我试图从文本字段中获取最大值。除了两个值之外的所有值都是带有一个小数的数字。但是,其中两个值类似8.2.10
。我怎样才能拉回整数值?值可以高于9.n
,因此我需要将此字段转换为数字,以便我可以获得返回的最大值。所以我想回来的只是8
中的8.2.1
。
Select cast(VERSION as int)
正在轰炸,因为这两个值中包含第二个.
。
答案 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;