将JSON字符串转换为十进制的问题

Rah*_*hra 1 sql t-sql sql-server casting decimal

这个问题可能会在许多线程上回答,但我无法找到特定于我的问题的答案.

问:我从API(以json格式)获取数据,其中所有列都以字符串形式出现并插入到一个表中,该表将所有列作为字符串并用作源表.

现在,我正在尝试将数据从该源转换为目标,并进行所有必要的转换以将数据插入目标表.但十进制(16,8)投射失败.

我在我的端调试问题,并发现在从API获取数据期间,将数据返回到json格式,以某种不寻常的格式转换值.

对于例如0.00007转换为7E-05,这发生在许多其他行上.

我知道我可以在API实现级别修复此问题.但我要求在SQL服务器端解决这个问题.所以我需要一个能将7E-05转换成0.00007的解决方案.

Sha*_*awn 5

尝试类似的东西:

SELECT CAST(CAST(@t AS FLOAT) AS DECIMAL(16,8))
Run Code Online (Sandbox Code Playgroud)

结果是:

0.00007000
Run Code Online (Sandbox Code Playgroud)

CAST到a FLOAT,然后到a DECIMAL.

  • @Shawn,对于2012年以下的版本,使用XML的演员有一个非常好的技巧:`SELECT CAST('32'AS XML).value('.cast as xs:int?','int')`这可以完全完成inline ...尝试用错误的值替换`32`,你只需要`NULL`. (2认同)