我正在尝试从文本字段中获取最大值。除两个值外,所有值都是带一个小数的数字。但是,其中两个值具有类似8.2.10
. 我怎样才能只拉回整数值?值可以高于9.n
,因此我需要将此字段转换为数字,以便获得返回的最大值。所以我只想8
从8.2.1
.
Select cast(VERSION as int)
由于这两个值中包含第二个值而被轰炸.
。
我正在尝试从文本字段中获取最大值。除两个值外,所有值都是带一个小数的数字。但是,其中两个值具有类似8.2.10
. 我怎样才能只拉回整数值?值可以高于9.n
,因此我需要将此字段转换为数字,以便获得返回的最大值。所以我只想8
从8.2.1
.
Select cast(VERSION as int)
由于这两个值中包含第二个值而被轰炸.
。
我不得不使用 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)
regexp_substr
您可以通过使用with \d
pattern得出:
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;
对于 Oracle,您必须将值作为字符串处理,以便仅取消点之前的部分。前任:
SELECT NVL( SUBSTR('8.2.1',0, INSTR('8.2.1','.')-1),'8.2.1') AS SR FROM DUAL;
检查该值在句子中重复 3 次,如果该值为零或该值没有小数部分,则返回设置的值。