SQL-小数点第2位で四捨五入


222

分を時間に変換し、小数点第2位を四捨五入する必要があります。小数点以下2桁まで表示する必要もあります。だから私は650分の分がある場合、時間は10.83になるはずです

ここに私がこれまで持っているものがあります:

Select round(Minutes/60.0,2) from ....

しかし、この場合、私の分がたとえば630の場合、時間は10.5000000です。しかし、私はそれを(丸めた後)10.50のみとして欲しいです どうすればこれを達成できますか?


3
どのデータベースエンジンを使用していますか?
ジャック

回答:


378

結果を次のようにキャストできませんnumeric(x,2)か?どこx <= 38

select 
    round(630/60.0,2), 
    cast(round(630/60.0,2) as numeric(36,2))

戻り値

10.500000   10.50

8
奇妙な。もうSELECT ROUND(630/60.0, 2);くれ10.50ます
ジャック

4
@ u07ch既にキャストを使用しているときにround()を使用する目的は何ですか?
ラム、

16
@Ram質問ではsqlサーバーエンジンを指定していませんでした。そのため、ラウンドvキャスト自体を強調表示しました。数値への変換では、すべてのエンジンで丸めが行われないため、計算された数値が10.809の場合、必要な質問は10.81ではなく10.80になります。
u07ch 2014

1
@ u07ch詳しい返信ありがとうございます。それは私を助けました。
ラム

8
cast(630/60.0 as numeric(36,2))is enougth10,50
MrHIDEn

78

SQL Server 2012の場合と同様に、あなたが使用できる組み込みのフォーマット機能

SELECT FORMAT(Minutes/60.0, 'N2')

(さらに読むために...)


2
これは、何千ものセパレータも導入することに注意してください。例:1,757.47
8128

10
「N2」ではなく「0.00」を使用すると、小数点以下の桁数が2桁になり、桁区切り記号も使用されません。
8128 2017年

2
文字列に変換するようです?注文によってねじ込みます。
blissweb 2018年

2
@blissweb Format関数の出力ではなく、元の列で注文できるため、問題にはなりません。
Matten

25

あなたは使うことができます

select cast((630/60.0) as  decimal(16,2))


5
CAST(QuantityLevel AS NUMERIC(18,2))

2
Stack Overflowへようこそ!コードスニペットをご利用いただきありがとうございます。このコードスニペットは、限られた範囲ですぐに役立つ場合があります。適切な説明は、なぜこれが問題の優れた解決策であるかを説明することにより、長期的な価値を大幅に改善し、他の同様の質問を持つ将来の読者にとってより有用になります。回答を編集して、仮定を含めて説明を追加してください。
-Sepehr



3

次のクエリは便利でシンプルです-

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

出力を0.25にします。


3

これまでに何が小数であるべき宗派での使用、例えば1548/100与えます15.00

私たちの例で置き換える100100.015.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

3

番号をNumericまたはに変換しますDecimal

クエリを次のように置き換えます。

SQLサーバー

Select Convert(Numeric(38, 2), Minutes/60.0) from ....

MySql:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....

Cast機能はのラッパーですConvert機能。SQLがインタープリター言語であることと組み合わせると、その結果、2つの関数が同じ結果を生成しても、関数の裏側で少し多くの処理が行われCastます。Convert関数の使用はわずかな節約ですが、わずかな節約が増大します。



2

以下の答えの補足として、式でINTまたは非10進数データ型を使用する場合は、値に1と希望する10進数の数を掛けてください。

つまり- TotalPackagesはでありINT、したがって分母TotalContainersですが、結果に小数点以下6桁までを設定します。

したがって:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,

1

次のスニペットが役立つ場合があります。

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours

0

私はSTR関数がこれを達成するための最もクリーンな方法だと思っています。

SELECT STR(ceiling(123.415432875), 6, 2)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.