当“">”或“<" both work but not together

问题描述 投票:0回答:1

我正在尝试过滤掉存储为字符串但代表数值的数据。 我过滤掉非数字字符串,然后转换为浮点数。然后我尝试过滤高于或低于特定金额的值。下面是我的查询的简化版本,可在禁用过滤器的情况下使用

WITH attributes AS (

    SELECT
        property_id,
        CASE WHEN regexp_replace(value, '[^0-9.]', '')='' THEN
            null
        ELSE
            regexp_replace(value, '[^0-9.]', '')::float
        END AS sqft, 'platform' FROM mv_prop_attributes
        WHERE
            display_name = 'Livable Area'
            and sqft is not null
            and length(sqft)>0
)

    SELECT
            *
        FROM
            attributes
        WHERE true
--          and sqft < 100000 --works
--          and sqft>200 --works
--          and sqft < 100000 and sqft>200 --does not work
--          and sqft between 200 and 100000 --does not work

正如评论部分所述,我可以过滤高于或低于某个值,但不能过滤范围。尝试这样做会产生以下错误: 错误:无效数字,值“.”,位置 0,类型:双精度 详细信息:

错误:无效数字,值“.”,位置 0,类型:双精度 代码:1207 语境: 。 查询:438646641 位置: :0 进程:query0_117_438646641 [pid=0]

它在最新的 redshift 集群上运行。感谢您提供有关如何在数据库级别解决此问题的任何建议。

postgresql amazon-redshift between digits
1个回答
0
投票

我认为问题可能是您没有考虑到句点(相对于小数点)。字符串“一千平方英尺”。将通过您的 SQL 作为单个“.”无法转换为浮点数。

我怀疑您没有遇到不等式的错误,因为 Redshift 可以在可以的情况下下推 WHERE 子句(但这种情况似乎很极端)。不等式可以应用于字符串 - '1' < '2' - but this doesn't work the same for ranges. This could be letting the query run but is a long shot.

© www.soinside.com 2019 - 2024. All rights reserved.