0

数値を含む varchar データがいくつかあり、数値部分のみを取り除こうとしています。私はこれを、同時に他の多くのことを行っているストアド プロシージャの一部として行っているので、インライン クエリの一部としてこれを行うことを望んでいます。

この列のデータ値は次のようになります (varchar の末尾を示すために単一の目盛りを追加しました):

'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 に答える