【发布时间】:2018-02-10 07:08:15
【问题描述】:
当我执行以下查询时:
DECLARE @KG FLOAT = 5.0;
WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight;
我得到这个输出:
| KG | LB |
|----|--------------|
| 5 | 11.023113109 |
现在,当我简单地将 FOR JSON AUTO 附加到输出 JSON 时,
我得到以下输出:
[{"KG":5.000000000000000e+000,"LB":1.102311310900000e+001}]
我知道以上是有效的 JSON,但我想要的输出是:
[{"KG":5,"LB":11.023113109}]
重要提示:我意识到我可以通过简单地将@KG 声明为DECIMAL 或INT 来获得所需的输出。我宁愿不这样做,因为我是从我没有编辑权限的VIEW 中选择的,并且我不想将每个FLOAT 列单独转换为DECIMAL(如果可能)。
有没有办法在不将每个单独的值转换为 DECIMAL 的情况下做到这一点?
【问题讨论】:
-
你不能将 KG 声明为 int 吗?
-
再一次,不是真的。我选择的
KG、LB和VIEW中的其他几列都是FLOAT。不过,我真的很欣赏这个想法。我最好的选择仍然是投。问题中的查询只是重现问题的一种非常简单的方法。我刚刚编辑了原始问题。 -
我认为演员是唯一的方式
-
好吧,这就是我害怕的。只有很多列,我更喜欢简单的
SELECT * FROM MyView FOR JSON AUTO而不是SELECT CAST(KG AS DECIMAL) KG, CAST(LB AS DECIMAL) LB, [etc ...] FROM MyView FOR JSON AUTO -
你不能创建一个包装视图并在那里投射列吗?
标签: sql json sql-server tsql sql-server-2017