How to get a float result by dividing two integer values using T-SQL?

后端 未结 8 1663
暖寄归人
暖寄归人 2020-11-22 15:39

Using T-SQL and Microsoft SQL Server I would like to specify the number of decimal digits when I do a division between 2 integer numbers like:

select 1/3


        
相关标签:
8条回答
  • 2020-11-22 15:50

    It's not necessary to cast both of them. Result datatype for a division is always the one with the higher data type precedence. Thus the solution must be:

    SELECT CAST(1 AS float) / 3
    

    or

    SELECT 1 / CAST(3 AS float)
    
    0 讨论(0)
  • 2020-11-22 15:52

    use

    select 1/3.0
    

    This will do the job.

    0 讨论(0)
  • 2020-11-22 15:52

    I understand that CASTing to FLOAT is not allowed in MySQL and will raise an error when you attempt to CAST(1 AS float) as stated at MySQL dev.

    The workaround to this is a simple one. Just do

    (1 + 0.0)
    

    Then use ROUND to achieve a specific number of decimal places like

    ROUND((1+0.0)/(2+0.0), 3)
    

    The above SQL divides 1 by 2 and returns a float to 3 decimal places, as in it would be 0.500.

    One can CAST to the following types: binary, char, date, datetime, decimal, json, nchar, signed, time, and unsigned.

    0 讨论(0)
  • 2020-11-22 15:54

    The suggestions from stb and xiowl are fine if you're looking for a constant. If you need to use existing fields or parameters which are integers, you can cast them to be floats first:

    SELECT CAST(1 AS float) / CAST(3 AS float)
    

    or

    SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
    
    0 讨论(0)
  • 2020-11-22 15:57

    Looks like this trick works in SQL Server and is shorter (based in previous answers)

    SELECT 1.0*MyInt1/MyInt2
    

    Or:

    SELECT (1.0*MyInt1)/MyInt2
    
    0 讨论(0)
  • 2020-11-22 15:58

    If you came here (just like me) to find the solution for integer value, here is the answer:

    CAST(9/2 AS UNSIGNED)
    

    returns 5

    0 讨论(0)
提交回复
热议问题