web-dev-qa-db-ja.com

SQL Serverで* UP *を最も近い100に丸めます

図を簡単に丸めることは可能ですか? アップ SQL Serverで最も近い100(または1000、500、200など)に?

そう:

720-> 800
790-> 800
1401-> 1500

36
joshcomley

以下が動作するはずです。あなたの質問を読んだ後、私はあなたが100を返して欲しいものを正確に知りません。この場合、100は100を返します。

select floor((X + 99) / 100) * 100;

これにより、次の結果が得られます。

0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
50
Gray

最も近い千に切り上げるには、次を試してください:-

select round(YourValue, -3)

乾杯!!!!!

26
rkgit

1つのオプションは、次のように CEILING() 関数を使用することです。

SELECT CEILING(@value/100.0) * 100

タイプに応じて、最初に値を10進数に変換する必要がある場合があります。

15
krock

CEILING関数を使用して、図を切り上げます

DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
8
Shri

これを試して:

select round(@value、-2);

1
Saumya

これは、10進数の値でも機能します。

select floor((ceiling (@value) + 99) / 100) * 100;

0
steave

これを行うネイティブ関数はありませんが、簡単な数学のトリックがいくつもあります。例:

DECLARE @Foo int
SET @Foo = 720

print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
0
Philip Kelley

amountがintであると仮定して、このコードを使用できます。そうでない場合は、キャストする必要があるため、整数除算が行われます。

If amount % 100 != 0 Then
   roundedAmount = ((amount / 100) * 100) + 100
Else
   roundedAmount = amount

これを ユーザー定義関数 にパッケージ化できます。

0
C. Ross

一般的な解決策-MODを使用して最後の100位を見つけ、結果に100を追加します。

select (720 - MOD(720,100)) + 100 from dual;

次の80位が必要な場合は、「100」を「80」に置き換えてください。

0
Shaulian

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

パラメータ定義:

  1. @Number-丸める必要がある番号
  2. @RoundNearest 10、100、1000番目など
  3. @Direction0-> rounddown1->切り上げ

関数を使用する:

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*/
0
hkravitz

ExにROUND関数を使用するだけで、数値を最も近い10の倍数に丸めることは非常に簡単です。

SELECT ROUND(number/1000,2)*1000 

これにより、最も近い1000番目の値が得られます。

0
Sanjeet