我需要在PostgreSQL数据库上编写HQL查询(如果可能的话,请不要使用本机SQL),以选择android {
buildTypes {
getByName("debug") {
(this as ExtensionAware).extra["alwaysUpdateBuildId"] = false
}
}
}
值大于39的行。问题是attr
列是varchar列,不仅包含数字。我只需要数字,并且只需要大于39。对我有用的本机查询如下:
attr
我尝试了以下HQL等效项(均无效):
SELECT * FROM my_table WHERE attr ~ '^[0-9\.]+$' AND CAST(attr AS BIGINT) > 39;
答案 0 :(得分:1)
尝试创建像这样的PostgreSQL函数:
CREATE FUNCTION parse_attr_to_boolean(attr character varying) RETURNS BOOLEAN AS $$
BEGIN
RETURN attr ~ '^[0-9\.]+$' AND CAST(attr AS BIGINT) > 39;
END;
$$ LANGUAGE plpgsql;
现在,您只需在HQL查询中调用该函数即可:
SELECT t
FROM MyTable t
WHERE parse_attr_to_boolean(t.attr)
如我所解释的in this article,仅当SELECT子句中使用SQL函数时,才需要注册该函数。但是,由于您在WHERE子句中使用它,因此可以将其按原样传递给SQL查询。
答案 1 :(得分:0)
您可以应用此技巧:
SUBSTRING(
CONCAT('00000000000000000000', attr),
LENGTH(attr) + 1,
20
) > '00000000000000000039'
我使用了20个0
位数字的随机数。如果attr
中的数字更大,则需要进行调整。这不会解决attr
可能匹配的字符串数据的问题,但是我敢肯定您还有其他一些列可以帮助您更健壮地解释attr
列的内容。
但是,当然,我绝对会建议首先停止使用EAV反模式,和/或使用适当的数据类型...