类型转换为 FLOAT
Typecast to a FLOAT
以下查询没有返回 slope
和 intercept
的 expected/desired 结果。我终于意识到 slope
和 intercept
在我的锚查询中被类型化为整数,并通过递归保持整数。
WITH RECURSIVE t AS (
SELECT id parentId, idPublic parentIdPublic, name parentName,
slope parentSlope, intercept parentIntercept,
id, idPublic, name, type, 1 slope, 0 intercept, value
FROM measurements
WHERE id IN (414,415,416,417,491)
UNION ALL
SELECT t.parentId, t.parentIdPublic, t.parentName,
t.parentSlope, t.parentIntercept,
m.id, m.idPublic, m.name, m.type,
t.slope*pchm.sign*m.slope slope,
t.intercept+t.slope*pchm.sign*m.intercept intercept, m.value
FROM t
INNER JOIN subpoints sp ON sp.measurementId=t.id
INNER JOIN measurements m ON m.id=sp.measurementId
)
SELECT slope, intercept FROM t;
slope
和 intercept
需要能够存储大不相同的值,精确度并不重要,所以我觉得 FLOAT
最好。 slope
和 intercept
的架构如下所示:
`slope` FLOAT NOT NULL DEFAULT 1,
`intercept` FLOAT NOT NULL DEFAULT 0,
作为黑客解决方案,我将锚查询更改为:
SELECT id parentId, ..., 1.0 slope, 0.0 intercept, value
我认为正确的解决方案是将这两个值转换为 FLOAT
,但文档似乎不允许。我可以 DECIMAL
,但是,我遇到了 slope
和 intercept
可能是一个广泛的值的问题。
我可以将 slope
和 intercept
转换为 FLOAT
吗?如果不是,最好的解决方案是什么?
我认为 UNION
是反派,而不是 WITH
,等等 UNION
喜欢根据 第一SELECT
。当然,对于 WITH RECURSIVE
,您无法选择交换 SELECTs
。
所以...我投票给你的 'hack solution' 0.0 和 1.0。或者,这些可能更清楚:0e0 和 1e0。 (仍然是一个拼凑,但它指向 FLOAT
,而不是 DECIMAL
。)
我也对 CASTing
到 FLOAT
(或 DOUBLE
)的缺席感到遗憾。
以下查询没有返回 slope
和 intercept
的 expected/desired 结果。我终于意识到 slope
和 intercept
在我的锚查询中被类型化为整数,并通过递归保持整数。
WITH RECURSIVE t AS (
SELECT id parentId, idPublic parentIdPublic, name parentName,
slope parentSlope, intercept parentIntercept,
id, idPublic, name, type, 1 slope, 0 intercept, value
FROM measurements
WHERE id IN (414,415,416,417,491)
UNION ALL
SELECT t.parentId, t.parentIdPublic, t.parentName,
t.parentSlope, t.parentIntercept,
m.id, m.idPublic, m.name, m.type,
t.slope*pchm.sign*m.slope slope,
t.intercept+t.slope*pchm.sign*m.intercept intercept, m.value
FROM t
INNER JOIN subpoints sp ON sp.measurementId=t.id
INNER JOIN measurements m ON m.id=sp.measurementId
)
SELECT slope, intercept FROM t;
slope
和 intercept
需要能够存储大不相同的值,精确度并不重要,所以我觉得 FLOAT
最好。 slope
和 intercept
的架构如下所示:
`slope` FLOAT NOT NULL DEFAULT 1,
`intercept` FLOAT NOT NULL DEFAULT 0,
作为黑客解决方案,我将锚查询更改为:
SELECT id parentId, ..., 1.0 slope, 0.0 intercept, value
我认为正确的解决方案是将这两个值转换为 FLOAT
,但文档似乎不允许。我可以 DECIMAL
,但是,我遇到了 slope
和 intercept
可能是一个广泛的值的问题。
我可以将 slope
和 intercept
转换为 FLOAT
吗?如果不是,最好的解决方案是什么?
我认为 UNION
是反派,而不是 WITH
,等等 UNION
喜欢根据 第一SELECT
。当然,对于 WITH RECURSIVE
,您无法选择交换 SELECTs
。
所以...我投票给你的 'hack solution' 0.0 和 1.0。或者,这些可能更清楚:0e0 和 1e0。 (仍然是一个拼凑,但它指向 FLOAT
,而不是 DECIMAL
。)
我也对 CASTing
到 FLOAT
(或 DOUBLE
)的缺席感到遗憾。