T-SQL での Float から Nvarchar への確実な変換


今週、非 GUID ID 値を含む分析プロセスのバックフィル データを作成するという興味深い問題に遭遇しました.データは処理され、Microsoft SQL Server データベースに保存されます.これらの ID 値は、最終的に ETL 処理でデータ型 nvarchar として使用される 8 文字の数字です.

ソース データは、SQL Server Management Studio の標準の [タスク] オプションから項目をインポートしてインポートした Excel スプレッドシートでした.インポート後にデータを調べたところ、期待どおりの値が表示されました.


データに必要な変換に関する開発を完了しました.最終テーブルを必要に応じて各サーバーにエクスポートする予定だったので、最終一時テーブルに INTO <schema.table> ステートメントを追加して、データの永続テーブルを作成しました. QA にデータを返したとき、ID 値が科学表記になっていることに気付きました.


最終的に、これらの値は傾向と予測のために視覚化ツールに集約されます.これらの値は、テーブルに既にある値と正確には一致しません. INTO ステートメントから作成されたテーブルを確認すると、ID 列が float として変換されていることがわかりました.データ型を nvarchar に変更し、INSERT ステートメントに単純な変換を追加して解決しました.

SELECT CONVERT(nvarchar,@IDValue) As IdValue


これでも、科学表記法の値が得られました.

SQL Server が ID 値を float として識別していたという事実を突き止めることで、値の nvarchar への変換が完全かつ正確であることを保証する T-SQL のソリューションを見つけました.

SELECT CONVERT(nvarchar,CONVERT(bigint,@IDValue)) As IDValue




最初に float 値を bigint に変換すると、実際の値が保持されます.結果の bigint 値をさらに nvarchar に変換すると、明示的なデータ型を介してテーブルにスムーズに挿入されます.この修正された変換により、作業を完了するために必要なバックフィル テーブルの構築を完了することができました.