我的表packages
包含pack_id
和speed
列。
我有以下速度值:
1.5Mbps, 10Mbps, 12Mbps, 2.5Mbps, 5Mbps, 750Kbps
如何将其转换为速度的数字列? 谢谢, 塔米尔
答案 0 :(得分:0)
我已根据您的要求准备了样品,请检查。请注意为sql-server准备的样本。
根据您的DBMS搜索以下主题。
对于SQL Server:PATINDEX
for Oracle:REGEXP_LIKE
for oracle:REGEXP
以下内容适用于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'从下面给出的链接。
答案 1 :(得分:0)
您可以通过多种方式根据数据库实现此目的。我尝试使用teradata sql,它会让你了解你可以根据你的数据库实现的逻辑:
简单的substr instr方法:
select substr(speed,1,instr(speed,'bps')-2);
正则表达式方法
select REGEXP_SUBSTR (speed, '[\d.]*');
你在问题中忽略的一件事是关于速度的UOM。值填充为Kbps和Mbps,因此在Kbps的情况下,您还需要转换为Mbps。