在 Grails 3.2.10 中按日期(年、月、日)显示结果的命名查询
Named query to show results by date (Year, month, day) in Grails 3.2.10
给定这个域:
class Burger{
String description
Date dateCreated
}
目前,我有这个 namedQuery
queryOnDateCreated {Date dateArgument ->
eq 'dateCreated', dateArgument
}
我需要一个查询,它允许我找到域 Burger 中具有特定创建日期的所有对象,只考虑年、月和日(月的),而忽略小时、分钟、秒、毫秒。
经过一些额外的研究,我找到了一个解决方案,我将分享它以防它对其他人有帮助:
命名查询需要如下:
queryOnDateCreated {Date dateArgument ->
def dateArgumentIntervalEnd = DateUtils.addMilliseconds(dateArgument + 1, - 1)
between 'dateCreated', dateArgument, dateArgumentIntervalEnd
}
说明:
"between" 条件 returns 域中日期在给定时间间隔之间的每个对象。
由于 dateArgument 是一个只用年月日创建的日期,它的时间应该是 00:00:00:000(一天的第一时刻)。
此外,"dateArgument + 1"保存的是第二天(同一时间)的值,所以需要减去1毫秒,这样"dateArgumentIntervalEnd"会保存第二天的值"dateArgument" 的年月日相同,但时间将 23:59:59:999 保持一整天的间隔。
给定这个域:
class Burger{
String description
Date dateCreated
}
目前,我有这个 namedQuery
queryOnDateCreated {Date dateArgument ->
eq 'dateCreated', dateArgument
}
我需要一个查询,它允许我找到域 Burger 中具有特定创建日期的所有对象,只考虑年、月和日(月的),而忽略小时、分钟、秒、毫秒。
经过一些额外的研究,我找到了一个解决方案,我将分享它以防它对其他人有帮助:
命名查询需要如下:
queryOnDateCreated {Date dateArgument ->
def dateArgumentIntervalEnd = DateUtils.addMilliseconds(dateArgument + 1, - 1)
between 'dateCreated', dateArgument, dateArgumentIntervalEnd
}
说明:
"between" 条件 returns 域中日期在给定时间间隔之间的每个对象。
由于 dateArgument 是一个只用年月日创建的日期,它的时间应该是 00:00:00:000(一天的第一时刻)。
此外,"dateArgument + 1"保存的是第二天(同一时间)的值,所以需要减去1毫秒,这样"dateArgumentIntervalEnd"会保存第二天的值"dateArgument" 的年月日相同,但时间将 23:59:59:999 保持一整天的间隔。