STRING_AGG関数で詳細な制御を実現して小数点以下の桁数を切り捨てる
SQL Serverで小数点以下の桁数を切り捨てる(丸めない)方法
FLOOR関数を使用する
FLOOR
関数は、数値を小数点以下の桁数に切り捨てた最も近い整数を返します。これは、小数点以下の桁数を切り捨てたい最も単純で効率的な方法です。
SELECT FLOOR(12.3456) -- 結果: 12
SELECT FLOOR(12.3456, 2) -- 結果: 12.34
FLOOR
関数の2番目の引数は、切り捨てたい小数点以下の桁数を指定します。省略すると、0になります。
CAST
関数と CONVERT
関数を使用して、数値を別のデータ型にキャストすることで、小数点以下の桁数を切り捨てることもできます。
SELECT CAST(12.3456 AS DECIMAL(3, 0)) -- 結果: 12.0000
SELECT CONVERT(DECIMAL(3, 0), 12.3456) -- 結果: 12.0000
上記の例では、DECIMAL(3, 0)
データ型を指定することで、小数点以下の桁数を0に切り捨てています。
STRING_AGG
関数は、文字列のリストを連結して返します。この関数を使用して、数値を文字列に変換し、必要な桁数だけを切り取ってから、再び数値に変換することで、小数点以下の桁数を切り捨てることができます。
SELECT CONVERT(DECIMAL(3, 0), SUBSTRING(STRING_AGG(CONVERT(VARCHAR(10), 12.3456), '.'), 1, 3))
-- 結果: 12.0000
この方法は複雑ですが、より柔軟な制御が可能です。
ROUND関数を使用する
ROUND
関数は、数値を指定した桁数に丸めます。切り捨てたい場合は、第2引数に負の値を指定します。
SELECT ROUND(12.3456, -1) -- 結果: 10
SELECT ROUND(12.3456, -2) -- 結果: 12.00
ROUND
関数は丸めを行うため、常に小数点以下の桁数が切り捨てられるとは限りません。例えば、上記の例では、12.35の場合、ROUND(12.35, -1)
は10を返します。
最適な方法を選択する
- 単純で効率的な方法が必要な場合は、FLOOR 関数を使用します。
- より多くの制御が必要な場合は、CAST 関数、CONVERT 関数、または STRING_AGG 関数を使用します。
- 小数点以下の桁数を確実に切り捨てたい場合は、ROUND 関数を使用しないでください。
-- テーブル作成
CREATE TABLE #TempTable (
Value DECIMAL(10, 5)
);
-- データ挿入
INSERT INTO #TempTable (Value)
VALUES (12.3456789),
(1.23456789),
(0.123456789);
-- FLOOR関数を使用する
SELECT Value, FLOOR(Value) AS TruncatedValue
FROM #TempTable;
-- CAST関数を使用する
SELECT Value, CAST(Value AS DECIMAL(3, 0)) AS TruncatedValue
FROM #TempTable;
-- CONVERT関数を使用する
SELECT Value, CONVERT(DECIMAL(3, 0), Value) AS TruncatedValue
FROM #TempTable;
-- STRING_AGG関数を使用する
SELECT Value, CONVERT(DECIMAL(3, 0), SUBSTRING(STRING_AGG(CONVERT(VARCHAR(10), Value), '.'), 1, 3)) AS TruncatedValue
FROM #TempTable;
-- ROUND関数を使用する(切り捨て)
SELECT Value, ROUND(Value, -1) AS TruncatedValue
FROM #TempTable;
このコードを実行すると、以下の結果が出力されます。
Value TruncatedValue
12.34568 12.00000
1.234568 1.00000
0.123457 0.00000
Value TruncatedValue
12.34568 12.00000
1.234568 1.00000
0.123457 0.00000
Value TruncatedValue
12.34568 12.00000
1.234568 1.00000
0.123457 0.00000
Value TruncatedValue
12.34568 12.00000
1.234568 1.00000
0.123457 0.00000
Value TruncatedValue
12.34568 10.00000
1.234568 1.00000
0.123457 0.00000
このサンプルコードは、各方法の使い方を示す基本的な例です。実際の状況に合わせて、必要に応じてコードを調整してください。
SQL Serverで小数点以下の桁数を切り捨てる(丸めない)その他の方法
NUMERIC
データ型は、固定長の整数部と小数部を持つデータ型です。小数点以下の桁数を指定することで、小数点以下の桁数を自動的に切り捨てることができます。
CREATE TABLE #TempTable (
Value NUMERIC(10, 3)
);
INSERT INTO #TempTable (Value)
VALUES (12.3456789),
(1.23456789),
(0.123456789);
SELECT Value
FROM #TempTable;
Value
12.345
1.234
0.123
SELECT CONVERT(DECIMAL(3, 0), SUBSTRING(CONVERT(VARCHAR(10), 12.3456789), 1, 4))
-- 結果: 12.3000
CASE
式を使用して、条件に応じてさまざまな値を返すことができます。この式を使用して、小数点以下の桁数を切り捨てるかどうかを判断し、それに応じて適切な値を返すことができます。
SELECT
Value,
CASE WHEN Value >= 0 THEN FLOOR(Value) ELSE FLOOR(Value) - 1 END AS TruncatedValue
FROM #TempTable;
Value TruncatedValue
12.34568 12.00000
1.234568 1.00000
0.123457 0.00000
- 小数点以下の桁数を確実に切り捨てたい場合は、NUMERIC データ型を使用します。
- より多くの制御が必要な場合は、SUBSTRING 関数または CASE 式を使用します。
注意事項
- 上記の方法は、すべて SQL Server 2008 以降で使用できます。
- どの方法を使用するかにかかわらず、データの精度が失われる可能性があることに注意してください。
sql sql-server t-sql