0

我有一些 varchar 数据,其中包含数值,我试图只去掉数字部分。我将其作为同时执行许多其他操作的存储过程的一部分来执行,因此我希望将其作为内联查询的一部分来执行。

我在此列中的数据值如下所示(添加单个刻度以显示 varchars 的结尾):

'1.25', '< 5 min', '2.35 minutes', '50.43 min'

我想从这个专栏中得到的是:1.25、5、2.35、50.43

我的问题似乎是如何确定单选中数值的长度,所以我可以在最后去掉字符。除了选择一个值(我的数字并不总是相同的长度)之外,我不确定我能做什么。我只想要数值的原因是因为我需要将其转换为浮点数以获取目标值。

这是我尝试过的:

 SUBSTRING(my_data, PATINDEX('%[0-9]%', my_data), 4)
4

1 回答 1

1

这有点复杂,但它适用于您的示例。

declare @val varchar(10)
select @val='50.43 min'
select 
  case
     when PATINDEX('%[a-z]%',col) = 0
       then col
     else rtrim(SUBSTRING(col,1,PATINDEX('%[a-z]%',col)-1))
   end        
from
 ( select SUBSTRING(@val,PATINDEX('%[0-9]%',@val),PATINDEX('%[0-9]%',@val)
   +len(@val)+1) as col ) t

在这里您可以找到有关字符串函数的文档。

于 2012-09-14T07:09:40.537 回答