【问题标题】:Grails lower() in query not working查询中的 Grails lower() 不起作用
【发布时间】:2013-05-14 12:54:34
【问题描述】:

假设我有这样的代码:

def c = Account.createCriteria()
def results = c {
    between("balance", 500, 1000)
    eq("branch", "London")
    or {
        like("holderFirstName", "Fred%")
        like("holderFirstName", "Barney%")
    }
    maxResults(10)
    order("holderLastName", "desc")
}

我想使用 lower() 函数将数据转换为小写

def c = Account.createCriteria()
def results = c {
    between("balance", 500, 1000)
    eq("branch", "London")
    or {


        like("lower(holderFirstName)", "Fred%")
        like("lower(holderFirstName)", "Barney%")


    }
    maxResults(10)
    order("holderLastName", "desc")
}

我的代码不起作用。什么是正确的语法?我有变音符号的问题,所以我不想使用ilike

【问题讨论】:

标签: grails lowercase


【解决方案1】:

不知道您想使用哪个lower 函数,但我猜您想根据holderFirstName 属性获取数据,忽略大小写。

这里你可以使用ilike,这是一个不区分大小写的like

def c = Account.createCriteria()
def results = c.list {
    between("balance", 500, 1000)
    eq("branch", "London")
    or {
        ilike("holderFirstName", "Fred%")
        ilike("holderFirstName", "Barney%")
    }
    maxResults(10)
    order("holderLastName", "desc")
}

顺便说一句 - 你错过了根据你的标准打电话给list() ...

更新

您可以尝试将formula 添加到您的域类中,如下所示:

static mapping = {
   lowerFirstName formula: "lower(holder_first_name)"

}

并将条件中的属性更改为lowerFirstName

like("lowerFirstName", "fred%") // changed 'Fred%' to 'fred%' 

代码未经测试,但应该可以工作。

【讨论】:

  • 您还需要在实体类中添加 lowerFirstName。
【解决方案2】:

要在条件中使用数据库函数,您需要使用 sqlRestriction() 将限制直接添加到生成的 sql。

def c = Account.createCriteria()
def results = c.list {
...
  sqlRestriction("lower(holder_first_name) like '%%'")
}

请注意,您使用的是列名,而不是属性名。

【讨论】:

  • 这项工作很好,正是我想要的。但是如果第一个字母是德语变音符号,我还有另一个问题,尽管记录是数据库,但没有找到结果
【解决方案3】:

如果您尝试比较不区分大小写,另一种选择是为此目的使用 ilike。 Ilike 与 Like 类似,但不区分大小写。 here

如果您不想使用 ilike(添加到问题中),我认为您的替代方法是 executeQuery 和 hql。

Account.executeQuery(" select * from Account where .... or (lower(holderFirstName) = 'Fred%' ...")

【讨论】:

  • 我不能以某种方式使它与我拥有的默认标准一起工作。我不明白它只是一个函数调用,它不起作用。
  • 我不知道除了ilike之外的createCriteria怎么做,也许其他人有更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 2015-04-30
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2015-06-13
相关资源
最近更新 更多