SQL Serverで小数点以下を丸めずにTruncateする方法

SQL Serverで小数値を扱う際、データ内の小数点以下の桁数を管理する必要が生じることがあります。一般的なROUND関数は数値を丸めてしまい、すべてのシナリオに適しているわけではありません。このブログ記事では、SQL Serverで小数点以下を丸めずに切り捨てる方法を探ります。

問題: 丸める vs. 切り捨てる

例えば、123.456という小数値があり、それを小数点以下2桁に保ちたいとします。SQL Serverの標準的な丸め方法を使うと、自動的に値は123.46に調整されます。しかし、追加の小数を削除したい場合、その結果は123.45にする必要があります。この場面で切り捨てが重要になります。

サンプル値を見てみましょう:

DECLARE @value DECIMAL(18,2);
SET @value = 123.456;

このコードを通常の丸めで実行すると、@value123.46になります。しかし、それを123.45のまま保持したい場合はどうすればよいのでしょうか?

解決策: ROUND関数を使用する

SQL Serverは、小数点以下を切り捨てるのに役立つ強力なROUND関数を提供します。この関数には、三つのパラメーターが必要です:

  1. number: 切り捨てたい小数値です。
  2. decimals: 保持したい小数点以下の桁数を指定します。
  3. operation: これはオプションです。このパラメーターを0に設定すると結果を丸め、他の値(例えば1)に設定すると切り捨てます。

使用例

以下のようにしてROUND関数を効果的に使用できます:

SELECT ROUND(123.456, 2, 1);

この場合、第三のパラメーターに1を指定することで、値は123.45に切り捨てられ、丸められることはありません。

互換性

切り捨て機能を持つROUND関数は、以下の環境で動作します:

  • SQL Server(バージョン2008以降)
  • Azure SQL Database
  • Azure SQL Data Warehouse
  • Parallel Data Warehouse

詳細については、W3Schools SQL Server ROUNDドキュメントを参照してください。

結論

適切なパラメーターを使ってROUND関数を活用することで、SQL Serverで小数点以下を簡単に切り捨てることができます。この方法では、データの表示を正確に制御し、特定のプロジェクトニーズに必要な整合性と精度を維持することができます。

このテクニックを自分のSQL Server環境で試して、データが必要な形式に整えられていることを確認してください!