図を簡単に丸めることは可能ですか? アップ SQL Serverで最も近い100(または1000、500、200など)に?
そう:
720-> 800
790-> 800
1401-> 1500
以下が動作するはずです。あなたの質問を読んだ後、私はあなたが100を返して欲しいものを正確に知りません。この場合、100は100を返します。
select floor((X + 99) / 100) * 100;
これにより、次の結果が得られます。
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
最も近い千に切り上げるには、次を試してください:-
select round(YourValue, -3)
乾杯!!!!!
1つのオプションは、次のように CEILING() 関数を使用することです。
SELECT CEILING(@value/100.0) * 100
タイプに応じて、最初に値を10進数に変換する必要がある場合があります。
CEILING関数を使用して、図を切り上げます
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
これを試して:
select round(@value、-2);
これは、10進数の値でも機能します。
select floor((ceiling (@value) + 99) / 100) * 100;
これを行うネイティブ関数はありませんが、簡単な数学のトリックがいくつもあります。例:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
amount
がintであると仮定して、このコードを使用できます。そうでない場合は、キャストする必要があるため、整数除算が行われます。
If amount % 100 != 0 Then
roundedAmount = ((amount / 100) * 100) + 100
Else
roundedAmount = amount
これを ユーザー定義関数 にパッケージ化できます。
一般的な解決策-MODを使用して最後の100位を見つけ、結果に100を追加します。
select (720 - MOD(720,100)) + 100 from dual;
次の80位が必要な場合は、「100」を「80」に置き換えてください。
Gray's answerに加えて、次のインライン関数を使用します。
CREATE FUNCTION dbo.udf_RoundNearest
(
@Number bigint,
@RoundNearest bigint,
@Direction int
)
RETURNS TABLE AS
RETURN
SELECT CASE WHEN @RoundNearest>=@Number THEN @Number
ELSE
(
(@Number + CASE
WHEN @Direction = 0 --Round Down
THEN 0
ELSE CASE WHEN @Number % @RoundNearest = 0 THEN 0 ELSE @RoundNearest END
END) / @RoundNearest) * @RoundNearest
END Number
パラメータ定義:
関数を使用する:
SELECT * FROM dbo.udf_RoundNearest (1965,100,1) --> 2000
SELECT * FROM dbo.udf_RoundNearest (1359,100,0) --> 1300
SELECT * FROM dbo.udf_RoundNearest (1999,10,0) --1990
SELECT * FROM dbo.udf_RoundNearest (80,100,0) --> 80 (if the @number parameter is less or equal the @RoundNearest parameter the result will be the @number itself
次のような表に対して適用する場合にも使用できます。
;with tmp (Value) as
(select 1236 union all select 6584 union all select 9999)
select t.*, fn.Number
from tmp t
cross apply dbo.udf_RoundNearest (Value,100,0) fn
/*Result Set
Value Number
1236 1200
6584 6500
9999 9900*/
ExにROUND
関数を使用するだけで、数値を最も近い10の倍数に丸めることは非常に簡単です。
SELECT ROUND(number/1000,2)*1000
これにより、最も近い1000番目の値が得られます。