我想將我的小數SQL查詢結果以百分比轉換。示例我有一個0.295333我希望它是30%,如果我有一個0.090036我希望它是9%。使用SQL查詢刪除小數點
這是我到目前爲止。
(100 * (sample1/ sample2)) as 'Percent'
我也試過這一個,但問題是結果帶有」 .00",我不知道如何刪除小數。
cast (ROUND(100 * (sample1/sample2),0) As int) as 'Percent'
我想將我的小數SQL查詢結果以百分比轉換。示例我有一個0.295333我希望它是30%,如果我有一個0.090036我希望它是9%。使用SQL查詢刪除小數點
這是我到目前爲止。
(100 * (sample1/ sample2)) as 'Percent'
我也試過這一個,但問題是結果帶有」 .00",我不知道如何刪除小數。
cast (ROUND(100 * (sample1/sample2),0) As int) as 'Percent'
與下面的腳本嘗試..
cast (100 * Round((sample1/sample2),2) As int) as 'Percent'
所以當一些評論人士指出,可能需要注意你的數據類型,如果一個或兩個,你從你得到小數原列是整數。
一個處理這一簡便的方法是這樣的:
ColA * ColB * 1.0
這將確保您的整數被視爲小數
因此,如果您具有SQL Server 2012+可以使用格式,而不是亂七八糟的。像這樣FORMAT(YourDecimal,'#%')
,是的,那很簡單。
;WITH cteValues AS (
SELECT 0.295333 as OriginalValue
UNION ALL
SELECT 0.090036 as OriginalValue
)
SELECT
OriginalValue
,FORMAT(OriginalValue,'#%') as PercentFormat
FROm
cteValues
如果你是前2012年沒有格式的一種簡單的方法是通過100舍入到第100個兩三次,並投以int CAST(ROUND(YourDecimal,2) * 100 AS INT)
;WITH cteValues AS (
SELECT 0.295333 as OriginalValue
UNION ALL
SELECT 0.090036 as OriginalValue
)
SELECT
OriginalValue
,CAST(ROUND(OriginalValue,2) * 100 AS INT) as PercentInt
FROm
cteValues
由於int不能被定義有小數地方,如果您收到.00與類似的方法或您嘗試過的方法,我會問以下。
ROUND
如何工作?它是否保證返回值,如果是,如何?兩欄的優先順序是什麼? Arithmetic operators
影響結果和如何?
我只知道我不知道的,任何懷疑都值得調查。
由於ROUND
總是返回更高的優先級,這是沒問題的。它實際上是可以將您的值轉換爲整數的除法運算符(/
)。
始終驗證變量是一致一個數據類型或CAST
的如果任一不確定或不能保證(如不充分地進行格式化。即DECIMAL(4,2)
代替所需DECIMAL(5,3)
)。
DECLARE @Sample1 INT
, @Sample2 DECIMAL(4,2);
SET @Sample1 = 50;
SET @Sample2 =83.11;
SELECT ROUND(100 * @Sample1/@Sample2 , 0)
返回正確60.
SELECT ROUND(100 * @Sample2/@Sample1 , 0)
四捨五入之前錯誤地變成變量爲整數。
UPDATE 這也解釋了爲什麼小數保持輪後......那是更高的優先級。您可以添加另一個強制轉換將非INT數據類型轉換爲首選格式。
SELECT CAST(ROUND(<expression>, <Length>) AS INT)
請注意,在回答你的問題時,我自己學到了一些東西! :)
希望這會有所幫助。
實際上,您並不需要括號作爲sample1/sample2。它應該是'100.0 * sample1/sample2' – ZLK
我會使用'100.0 * sample1/sample2'來避免意外的隱式轉換爲'int'並截斷數據 – cha
@cha如果兩個變量都是'INT' –