代码之家  ›  专栏  ›  技术社区  ›  Martin Bobak

如何将varchar值转换为十进制?

  •  0
  • Martin Bobak  · 技术社区  · 7 年前

    nvarchar(max) 我想把这个列转换成 decimal(38,2) -1.943E12 因为 E 如果我出现错误, Cannot convert nvarchar into numeric ,当我试图将列转换为十进制时。有什么办法吗?

    CREATE TABLE practice (cost nvarchar(max))
    INSERT INTO practice values ('123'),('44232.99'),('43.4432'),('1.943E12')
    
    SELECT CAST(cost as decimal(32,2)) FROM practice
    

    我最终要做的是将一个暂存表(其中所有列都是nvarchar(max))中的数据插入到一个具有适当数据类型的表中。我不断地得到一个错误,所以在挖掘了40列中的每一列之后,我找到了5列出现这种科学符号的地方。关于如何在不必检查每个列的情况下按比例执行此操作,有什么建议吗?

    INSERT INTO practice_corrected_datatypes
    SELECT * FROM practice
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Michael    7 年前

    数字不能从指数格式转换,但浮点可以。所以你可以通过浮动来实现。例如:

    print cast(cast('1.943E12' as float) as decimal(38,2))
    
        2
  •  2
  •   Adrian Maxwell    7 年前

    假设你有 try_parse() try_cast()

    SELECT try_cast(try_parse(cost as float) as decimal(32,2))
    FROM practice
    

    优点是它们返回NULL而不是失败。您可能只需要使用内部try\u parse()

    SELECT cast(try_parse(cost as float) as decimal(32,2))
    FROM practice
    
        3
  •  0
  •   Cham    7 年前

    试试这个。。。

    设置成本=铸造(铸造(成本为浮动)为十进制(32,2)) 其中成本为“%E%”