cast or convert a float to nvarchar?

前端 未结 7 1150
醉话见心
醉话见心 2021-02-03 22:02

I need to select from one column of datatype float and insert it in another column as nvarchar.

I tried to cast it: cast([Column_Name] as nvarchar(50))

相关标签:
7条回答
  • 2021-02-03 22:30

    Check STR. You need something like SELECT STR([Column_Name],10,0) ** This is SQL Server solution, for other servers check their docs.

    0 讨论(0)
  • 2021-02-03 22:38

    Do not use floats to store fixed-point, accuracy-required data. This example shows how to convert a float to NVARCHAR(50) properly, while also showing why it is a bad idea to use floats for precision data.

    create table #f ([Column_Name] float)
    insert #f select 9072351234
    insert #f select 907235123400000000000
    
    select
        cast([Column_Name] as nvarchar(50)),
        --cast([Column_Name] as int), Arithmetic overflow
        --cast([Column_Name] as bigint), Arithmetic overflow
        CAST(LTRIM(STR([Column_Name],50)) AS NVARCHAR(50))
    from #f
    

    Output

    9.07235e+009    9072351234
    9.07235e+020    907235123400000010000
    

    You may notice that the 2nd output ends with '10000' even though the data we tried to store in the table ends with '00000'. It is because float datatype has a fixed number of significant figures supported, which doesn't extend that far.

    0 讨论(0)
  • 2021-02-03 22:38
    DECLARE @MyFloat [float]
    
    SET @MyFloat = 1000109360.050
    
    SELECT REPLACE (RTRIM (REPLACE (REPLACE (RTRIM ((REPLACE (CAST (CAST (@MyFloat AS DECIMAL (38 ,18 )) AS VARCHAR( max)), '0' , ' '))), ' ' , '0'), '.', ' ')), ' ','.')
    
    0 讨论(0)
  • 2021-02-03 22:44

    If you're storing phone numbers in a float typed column (which is a bad idea) then they are presumably all integers and could be cast to int before casting to nvarchar.

    So instead of:

    select cast(cast(1234567890 as float) as nvarchar(50))
    1.23457e+009
    

    You would use:

    select cast(cast(cast(1234567890 as float) as int) as nvarchar(50))
    1234567890
    

    In these examples the innermost cast(1234567890 as float) is used in place of selecting a value from the appropriate column.

    I really recommend that you not store phone numbers in floats though!
    What if the phone number starts with a zero?

    select cast(0100884555 as float)
    100884555
    

    Whoops! We just stored an incorrect phone number...

    0 讨论(0)
  • 2021-02-03 22:46

    Float won't convert into NVARCHAR directly, first we need to convert float into money datatype and then convert into NVARCHAR, see the examples below.

    Example1

    SELECT CAST(CAST(1234567890.1234  AS FLOAT) AS NVARCHAR(100))
    

    output

    1.23457e+009
    

    Example2

    SELECT CAST(CAST(CAST(1234567890.1234  AS FLOAT) AS MONEY) AS NVARCHAR(100))
    

    output

    1234567890.12
    

    In Example2 value is converted into float to NVARCHAR

    0 讨论(0)
  • 2021-02-03 22:56

    For anyone willing to try a different method, they can use this:

    select FORMAT([Column_Name], '') from YourTable
    

    This will easily change any float value to nvarchar.

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