2016-05-04 4 views
0

私が受け取ったExcel文書をmssqlデータベースにインポートしました。 すべてがうまくいっていて、2つの列からなる7000レコードのテーブルがあります。 今私は私がそこに格納されているいくつかのデータを比較するために、私のデータベースに既に存在するテーブルと、このExcelの表を結合したい:私のデータベース内varcharをfloatまたはそのまわりに変換する

SELECT b.ID, a.ID , b.NAME 
FROM ExcelTable b 
inner join DB_Table a 
on a.ID = cast(b.ID as varchar) 

IDさんはVARCHAR(20)として保存され、ExcelTable IDを取得します浮動小数点数としてインポートされ、型を変更することはできません。レコードが存在することはわかっていますが、上記のsqlでは結果が得られません。 私のフロートIDは元のIDの後ろに ".00000"で格納されているため、動作していません。

は、誰も私が

+0

ではなく、あなたの比較でvarchar型としてfloatをキャストするのfloatとしてvarchar型をキャスト?つまり、あなたの "on"節を "on cast(a.Id AS float)= b.ID"に変更します。 –

+0

こんにちは、私は試してみて、私はこのエラーが発生するデータ型varcharを浮動小数点に変換するエラー。 – MishMish

答えて

1

をこの問題を解決してくださいするのに役立つことができますので、私はあなたのテーブルのIDが整数であると仮定しますか?その場合には、これは動作するはずです:

SELECT 
    b.ID, 
    a.ID, 
    b.NAME 
FROM 
    ExcelTable b 
    INNER JOIN DB_Table a ON CONVERT(INT, a.ID) = CONVERT(INT, b.ID); 

あなたのDBのテーブルの非数値何かを持っている場合は、INTにVARCHARの変換に関するエラーが発生しますと、これは、失敗します。これが事実であるなら、あなたはこれで逃げるかもしれません:

SELECT 
    b.ID, 
    a.ID, 
    b.NAME 
FROM 
    ExcelTable b 
    INNER JOIN DB_Table a ON a.ID = CONVERT(VARCHAR(50), CONVERT(INT, b.ID)); 

は、今私たちができるようにVARCHARにこれを変換し、その後、「0.0000" の部分脱落う整数に浮動小数点数を変換しますあなたのデータベーステーブルとの比較。

EDIT:だからそれはあなたの番号がのINTに変換するには大きすぎるしていることが判明し、その代わりにBIGINTsを試してみてください。

SELECT 
    b.ID, 
    a.ID, 
    b.NAME 
FROM 
    ExcelTable b 
    INNER JOIN DB_Table a ON a.ID = CONVERT(VARCHAR(25), CONVERT(BIGINT, b.ID)); 
+0

こんにちはリチャードはあなたの答えに感謝します。 IDはテーブルの実IDではなく、DB_Tableではvarchar(25)であり、Excelテーブルでは浮動小数点型です。私はあなたのメソッドを試してみると、私は次のエラーが表示されます:タイプint、値= 3490001445329.000000の算術オーバーフローエラー。 私は問題が ".000000"だと思います。コンマとゼロはそこにあってはなりません。私は(置換)まだ動作していませんでした。 – MishMish

+0

さて、あなたの数値はINTsに変換するには大きすぎますので、代わりにBIGINTを試してみてください。つまり、最後のCONVERTをCONVERT(BIGINT、b.ID)に変更します。 –

関連する問題