我正在尝试过滤掉存储为字符串但代表数值的数据。 我过滤掉非数字字符串,然后转换为浮点数。然后我尝试过滤高于或低于特定金额的值。下面是我的查询的简化版本,可在禁用过滤器的情况下使用
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
它在最新的 redshift 集群上运行。感谢您提供有关如何在数据库级别解决此问题的任何建议。
我认为问题可能是您没有考虑到句点(相对于小数点)。字符串“一千平方英尺”。将通过您的 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.