0

我想按数据存储中的一个字段的长度过滤查询,但似乎我不能在 WHERE 子句中包含 len 函数。

q = db.GqlQuery("SELECT CommentCode FROM Comments " + 
                "WHERE RefObjType = 'paper' AND RefObjID = :1 AND len(CommentCode) = :2" +
                "ORDER BY CommentCode DESC ", RefObjID, 1)

这导致:BadQueryError: Parse Error: Invalid WHERE Condition at symbol (

谁能给我一个例子来说明我如何让它工作?

RefObjID 部分有效,因为如果我忽略 len() 过滤器,则整个查询都有效。

谢谢。

4

2 回答 2

1

由于 DataStore 的工作方式,您不能(至少据我所知)。字符串的长度需要是您的属性(静态或动态使用db.ExpandoModel,然后您对其进行过滤。

于 2012-08-05T12:54:07.710 回答
0

一种可能的解决方案:
修改查询以按 DESC 顺序检索结果,然后在查询检索后通过访问所需的结果来处理结果。

变更查询:

  q = db.GqlQuery("SELECT CommentCode FROM Comments " + 
                    "WHERE RefObjType = 'paper' AND RefObjID = :1" +
                    "ORDER BY CommentCode DESC ", RefObjID, 1)

在此之后选择具有length(CommentCode)==2循环和条件语句的行。

于 2012-08-05T13:01:17.323 回答