丸めずにSQLで余分な小数点以下を切り捨てまたは削除する最良の方法を決定しようとしています。例えば:
declare @value decimal(18,2)
set @value = 123.456
これは自動的にに丸め@valueられます123.46。これはほとんどの場合に適しています。ただし、このプロジェクトでは必要ありません。不要な小数を切り捨てる簡単な方法はありますか?left()関数を使用して、10進数に戻すことができることを知っています。他の方法はありますか?
丸めずにSQLで余分な小数点以下を切り捨てまたは削除する最良の方法を決定しようとしています。例えば:
declare @value decimal(18,2)
set @value = 123.456
これは自動的にに丸め@valueられます123.46。これはほとんどの場合に適しています。ただし、このプロジェクトでは必要ありません。不要な小数を切り捨てる簡単な方法はありますか?left()関数を使用して、10進数に戻すことができることを知っています。他の方法はありますか?
回答:
select round(123.456, 2, 1)
ROUND ( 123.456 , 2 , 1 )
3番目のパラメーター!= 0の場合、丸めるのではなく切り捨てます
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
構文
ROUND ( numeric_expression , length [ ,function ] )
議論
numeric_expression
ビット・データ・タイプを除いて、正確な数値または近似数値データ・タイプのカテゴリーの式です。
length
numeric_expressionを丸める精度です。lengthは、tinyint、smallint、またはint型の式でなければなりません。lengthが正の数の場合、numeric_expressionは、lengthで指定された小数点以下の桁数に丸められます。lengthが負の数の場合、numeric_expressionは、lengthで指定されているように、小数点の左側で丸められます。
function
実行する操作のタイプです。functionは、tinyint、smallint、またはintでなければなりません。関数が省略されるか、値が0(デフォルト)の場合、numeric_expressionは丸められます。0以外の値が指定された場合、numeric_expressionは切り捨てられます。10進数が必要かどうか。
そうでない場合は、
select ceiling(@value),floor(@value)
それを0で行う場合は、ラウンドを実行します。
select round(@value,2)
丸めのソリューションと例がない別の切り捨て。
Convert 71.950005666 to a single decimal place number (71.9)
1) 71.950005666 * 10.0 = 719.50005666
2) Floor(719.50005666) = 719.0
3) 719.0 / 10.0 = 71.9
select Floor(71.950005666 * 10.0) / 10.0
Floor()は、実際に丸めずに小数を切り捨てる方法です。残念なことに、Floor()には、どの位置にあるかを示す2番目のパラメーターがありません。しかし、私は* 10)/ 10が実際にこれをうまく回避すると思います。
別の方法はODBC TRUNCATE関数です:
DECLARE @value DECIMAL(18,3) =123.456;
SELECT @value AS val, {fn TRUNCATE(@value, 2)} AS result
出力:
╔═════════╦═════════╗
║ val ║ result ║
╠═════════╬═════════╣
║ 123,456 ║ 123,450 ║
╚═════════╩═════════╝
リマーク:
ROUND3番目のパラメーターを1に設定して組み込み関数を使用することをお勧めします。
このコードを使用して、小数点以下3桁の値を小数点以下2桁に変換してみてください。
declare @val decimal (8, 2)
select @val = 123.456
select @val = @val
select @val
出力は123.46です
私はハッカーランクにある簡単な例の解決策でもっと簡単にできると思います:
問題ステートメント:137.2345未満であるSTATIONからの北緯(LAT_N)の最大値をクエリします。答えを小数点以下4桁に切り捨てます。
SELECT TRUNCATE(MAX(LAT_N),4)
FROM STATION
WHERE LAT_N < 137.23453;
上記のソリューションでは、値を小数点以下4桁に制限する方法を説明しています。10進数の後に数値を増減する場合は、4を好きなように変更します。