2013-04-09 57 views
0

我有一个字符串,它是:Grails的匹配日期

"may 2013" 

这是指五月的第二个。我正在尝试获取PostOrder的所有实例,其中日期是五月的第二个。

我迄今为止尝试:

def t = new Date(new Integer(sp[1]), new Integer(month), 01) 
def results = PostOrder.createCriteria().list() { 
    ilike('dateCreated', t ) 
} 

请注意,所以SP [1]是2013,我已经分析了五月我已经分割字符串所以一个月变量不是05

上述尝试不起作用。

我知道唯一可行的方法就是抓住所有对象并为它们做每个对象。解析dateCreated为一个字符串,然后做一个.contains()。但是这会变得非常缓慢和混乱。

+0

ilike在约会? 1到31之间怎么样? – 2013-04-09 12:06:27

+0

对不起,我应该说dateCreated是Date类型 – Sagarmichael 2013-04-09 12:22:00

回答

1

第一点。根据documentationilike()是不区分大小写的'like'表达式 - 请参阅SQL LIKE Operator。所以,它不能接受日期。你需要的只是eq()

def t = new Date(new Integer(sp[1]), new Integer(month), 1) 
def results = PostOrder.createCriteria().list() { 
    eq('dateCreated', t) 
} 

另一点。作为第一个参数的年份减去1900的构造函数Date()accepts。所以,你可能需要从new Integer(sp[1])减去1900。 另外,该构造函数已被弃用;我会建议使用GregorianCalendar(new Integer(sp[1]), new Integer(month), 1).time