我有一些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)
答案 0 :(得分: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
Here您可以找到有关字符串函数的文档。