2016-08-15 14 views
0

私は長い時間前にExcelからインポートされた番号を格納するnvarchar(255)列を持っています。以下のようなExcel形式番号を数値(10進または浮動小数点数)に変換する方法は?

フォーマット:

7,242 
(4,011) 
- 
(24,120.2) 
- 
4,234,091 

" - " ここに0を意味します。

私は現在、それがとにかく

convert(decimal(18,4),RTRIM(LTRIM(replace(replace(replace(replace([Column a],'-',0),',',''),'(','-'),')','')))) 

を10進数に変換するために「置き換える」を使用しています、私はそれは少し愚かだと思います。もっと良い方法?

+0

明確なサンプルと明確なサンプル結果を提供 –

+0

mssql(T-SQL)について話していますか? convert(money、 '1,234,567.8'、1)はフォーマットされた文字列niceを変換します。 convert(money、 ' - '、1)を0に変換すると、結果を任意の数値型に変換できます – vitalygolub

答えて

0

Excelの値を処理するために、Query to get only numbers from a stringの関数の修正版を使用することができます。次のように

CREATE FUNCTION dbo.udf_GetNumeric 
    (
    @strAlphaNumeric VARCHAR(256) 
    ) 
RETURNS VARCHAR(256) 
AS 
    BEGIN 
     DECLARE @intAlpha INT 
     SET @intAlpha = PATINDEX('%[^0-9.-]%', @strAlphaNumeric) 
     BEGIN 
      WHILE @intAlpha > 0 
      BEGIN 
       SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 
             1, '') 
       SET @intAlpha = PATINDEX('%[^0-9.-]%', @strAlphaNumeric) 
      END 
     END  
     RETURN CASE WHEN ISNULL(@strAlphaNumeric,0)='-' THEN 0 ELSE CONVERT(DECIMAL(18,4),@strAlphaNumeric) END 
    END 
GO 

あなたは、あなたの値を変換することができます

SELECT dbo.udf_GetNumeric('7,242') 
SELECT dbo.udf_GetNumeric('(4,011)') 
SELECT dbo.udf_GetNumeric('-') 
SELECT dbo.udf_GetNumeric('(24,120.2)') 
SELECT dbo.udf_GetNumeric('-') 
SELECT dbo.udf_GetNumeric('4,234,091') 

を実装が必ずしも良いとは限りませんが、それは、それははるかに容易にコードを達成しようとしているかを理解することができます。

関連する問題