Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
116 views
in Technique[技术] by (71.8m points)

Transformation of units in SQL Server

I have a dataset, df, that has a column of values that are in MB. I would like to transform into TB.

MB

10000000
20000000

Desired

TB

9.09
18.18

Doing

select MB AS 'TB', (CONVERT([int],round([MB]/((1024)*(1024)),(0)))) AS TB from df

However, the result I get is

MB

0
0

I am still researching. Any suggestion is appreciated

question from:https://stackoverflow.com/questions/65877108/transformation-of-units-in-sql-server

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

/ is integer division in SQL Server. It means, that for example

SELECT 4 / 5

will return 0.

But, if you write

SELECT 4 / 5.0

you'll get 0.8

5.0 is treated as decimal type and all values in the expression are converted to decimal and division is no longer integer.

So, you can use 1024.0 constant in the expression, and all the values in it will be converted to decimal type and division will not be integer.

In the question you say that you want to show results with two decimal places, so you should not convert result to int.

select 
    [MB]
    ,round([MB]/(1024.0*1024.0), 2) AS TB 
from df

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...