2017-04-06 11 views
-1

小数点をvarcharから切り離すにはどうすればよいですか? Ex。 '97 .4N IU/ML 'から'97 .4'を取得するにはどうしたらいいですか?SQL:varcharから小数点を抽出

+0

文字列に一貫したパターンがあります(数字は常に最初の3文字です)。 –

+0

デイヴィッド。はい、先頭の文字は常に数字になります。私の質問は答えられました。ありがとう!! –

答えて

1

番号部分を仮定すると、いつもあなたが私の解決策は、文字列のみの小数部分を抽出する前に

を更新しまし行うことができます左側にあるであろう、それは何の変換もしませんでした。さらに、悪いデータが得られた場合は、その列に何が入っているのか保証することはできません。科学的な表現が得られる可能性も非常に高いので、数値を抽出する前にISNUMERIC()テストを行うのが最善です。浮動小数点型の型を使用して文字列を変換するのはいいですが、これは科学的な式も扱うためですが、数値を浮動小数点として格納することは決して良いことではありません。2.70として表示される浮動小数点は、システムはそれをより多くの精度の場所に格納することに決めました。そのため、値の比較や数学を行う計画を立てる場合は、常に固定精度の形式で数値を格納する必要があります。

CREATE TABLE MyTable(MyColumn VARCHAR(25)) 
GO 

INSERT INTO MyTable(MyColumn) 
VALUES 
('1.23E+10') 
,('2.23E+8') 
,('2.235432E-6') 
,('4 of 40') 
,('500mg/day') 
,('97.4N IU/ML') 
,('No Maximun') 
,(NULL) 
,('') 
,('See Appendix R') 
GO 

SELECT 
    CONVERT(DECIMAL(20,8), 
    CASE 
    WHEN IsNumeric(MyColumn)=1 THEN 
     CONVERT(FLOAT,MyColumn) 
    ELSE CONVERT(FLOAT,'0'+LEFT(MyColumn,PATINDEX('%[^0-9.]%',MyColumn)-1)) 
    END) AS MyDecimal 
    ,MyColumn 
FROM MyTable 

New SQL Fiddle

旧回答

SELECT LEFT('97.4N IU/ML',PATINDEX('%[^0-9.]%', '97.4N IU/ML')-1) 

ので、カラム上でそれを実行するには、この

SELECT LEFT(MyColumn,PATINDEX('%[^0-9.]%', MyColumn)-1) FROM MyTable 

のようになります。あなたはこれを使用して(古い答えを)テストすることができますSQL Fiddle

+0

ありがとう!これは私が必要としていたものに完璧でした。あなたは時間をとっていただきありがとうございます。 –

関連する問題