SELECT FOR JSON 输出浮点指数
SELECT FOR JSON outputs exponent on floating points
当我执行以下查询时:
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,
DECLARE @KG FLOAT = 5.0;
WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight FOR JSON AUTO;
我得到以下输出:
[{"KG":5.000000000000000e+000,"LB":1.102311310900000e+001}]
我知道以上是有效的 JSON,但我想要的输出是:
[{"KG":5,"LB":11.023113109}]
重要说明:我意识到我可以通过简单地将 @KG
声明为 DECIMAL
或 INT
来获得所需的输出。我宁愿不这样做,因为我是从我没有编辑权限的 VIEW
中选择的,而且我不想单独将每个 FLOAT
列转换为 DECIMAL
如果可能的话。
有没有办法不将每个单独的值强制转换为 DECIMAL
?
你应该使用 exact numeric datatypes
:
DECLARE @KG DECIMAL(38,12) = 5.0;
WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight FOR JSON AUTO;
当我执行以下查询时:
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,
DECLARE @KG FLOAT = 5.0; WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218) SELECT * FROM Weight FOR JSON AUTO;
我得到以下输出:
[{"KG":5.000000000000000e+000,"LB":1.102311310900000e+001}]
我知道以上是有效的 JSON,但我想要的输出是:
[{"KG":5,"LB":11.023113109}]
重要说明:我意识到我可以通过简单地将 @KG
声明为 DECIMAL
或 INT
来获得所需的输出。我宁愿不这样做,因为我是从我没有编辑权限的 VIEW
中选择的,而且我不想单独将每个 FLOAT
列转换为 DECIMAL
如果可能的话。
有没有办法不将每个单独的值强制转换为 DECIMAL
?
你应该使用 exact numeric datatypes
:
DECLARE @KG DECIMAL(38,12) = 5.0;
WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight FOR JSON AUTO;