SQL从字符串中提取数字并转换为int

时间:2016-10-21 07:02:01

标签: sql

我的表packages包含pack_idspeed列。 我有以下速度值:

1.5Mbps, 10Mbps, 12Mbps, 2.5Mbps, 5Mbps, 750Kbps

如何将其转换为速度的数字列? 谢谢, 塔米尔

2 个答案:

答案 0 :(得分:0)

我已根据您的要求准备了样品,请检查。请注意为sql-server准备的样本。

根据您的DBMS搜索以下主题。

  1. 对于SQL Server:PATINDEX

  2. for Oracle:REGEXP_LIKE

  3. for oracle:REGEXP

  4. 以下内容适用于SQL Server

    declare @Speed as varchar(50)='1.5Mbps'
    
    select Left(
          SubString(@Speed, PatIndex('%[0-9.-]%', @Speed), 8000), 
          PatIndex('%[^0-9.-]%', SubString(@Speed, PatIndex('%[0-9.-]%', @Speed), 8000) + 'X')-1)
    

    您可以详细了解' PATINDEX'从下面给出的链接。

    https://msdn.microsoft.com/en-IN/library/ms188395.aspx

答案 1 :(得分:0)

您可以通过多种方式根据数据库实现此目的。我尝试使用teradata sql,它会让你了解你可以根据你的数据库实现的逻辑:

简单的substr instr方法:

select substr(speed,1,instr(speed,'bps')-2);

正则表达式方法

select REGEXP_SUBSTR (speed, '[\d.]*');

你在问题​​中忽略的一件事是关于速度的UOM。值填充为Kbps和Mbps,因此在Kbps的情况下,您还需要转换为Mbps。