类型转换为 FLOAT

Typecast to a FLOAT

以下查询没有返回 slopeintercept 的 expected/desired 结果。我终于意识到 slopeintercept 在我的锚查询中被类型化为整数,并通过递归保持整数。

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;

slopeintercept 需要能够存储大不相同的值,精确度并不重要,所以我觉得 FLOAT 最好。 slopeintercept 的架构如下所示:

`slope` FLOAT NOT NULL DEFAULT 1,
`intercept` FLOAT NOT NULL DEFAULT 0,

作为黑客解决方案,我将锚查询更改为:

SELECT id parentId, ..., 1.0 slope, 0.0 intercept, value

我认为正确的解决方案是将这两个值转换为 FLOAT,但文档似乎不允许。我可以 DECIMAL,但是,我遇到了 slopeintercept 可能是一个广泛的值的问题。

我可以将 slopeintercept 转换为 FLOAT 吗?如果不是,最好的解决方案是什么?

认为 UNION 是反派,而不是 WITH,等等 UNION 喜欢根据 第一SELECT。当然,对于 WITH RECURSIVE,您无法选择交换 SELECTs

所以...我投票给你的 'hack solution' 0.0 和 1.0。或者,这些可能更清楚:0e0 和 1e0。 (仍然是一个拼凑,但它指向 FLOAT,而不是 DECIMAL。)

我也对 CASTingFLOAT(或 DOUBLE)的缺席感到遗憾。