当它作为字符串存储时,如何使用Date进行搜索?

时间:2014-11-28 21:48:02

标签: grails gorm

我有一个遗留数据库,它将日期存储为纯文本字符串和实际日期。更相关/重要的日期存储为字符串。

对字符串使用GORM非常简单。

我遇到的困难是我需要按日期搜索,并且该日期以两种不同的格式存储为字符串,即" 11/28/2014"和" 11/28/2014 12:00:00 AM"

3 个答案:

答案 0 :(得分:0)

如果没有特定于您的数据库的解决方案,您将无法执行此操作,并且该解决方案将取决于您使用的数据库。想要这样做是证明您的数据库不是为满足您的要求而设计的。如果您必须访问表格中的每条记录并进行字符串转换,那么您可以根据转换结果进行过滤,这不会扩展。如果你有一个小型数据库并且不关心性能损失,那么它可能是可行的,具体取决于你的数据库,但对于这个来说,它不是一个很好的通用解决方案。

答案 1 :(得分:0)

您还可以搜索.withCriteria {..}并在OR语句中对两种格式进行加密,在SQL中如下:

WHERE (date = '2014/01/01' OR date = '2014/01/01 12:00:00 AM')
AND something_else = "other-thing"

然而,基本问题仍然存在于早前的回复中。

答案 2 :(得分:0)

您需要将所有日期都设置为相同的数据类型。 这种方式更容易比较和操纵它们。 为什么不尝试将字符串值转换为Date值? 在项目目录中打开grails console并尝试:

String myDate1 = "11/28/2014"
def newDate1 = new Date().parse("M/d/yyyy", myDate1)
println "newDate1 = ${newDate1}"
println "newDate1 plus one day = ${newDate1 + 1}"

String myDate2 = "11/28/2014 12:00:00 AM"
def newDate2 = new Date().parse("M/d/yyyy H:m:s a", myDate2)
println "newDate2 = ${newDate2}"
println "newDate2 plus one day = ${newDate1 + 1}"

你应该得到这个输出:

newDate1 = Fri Nov 28 00:00:00 PST 2014
newDate1 plus one day = Sat Nov 29 00:00:00 PST 2014
newDate2 = Fri Nov 28 12:00:00 PST 2014
newDate2 plus one day = Sat Nov 29 00:00:00 PST 2014

正如您所说,这不是一个非常大的数据库,因此您必须在加载的数组中过滤搜索。但是,一旦将您的值设为Date,就可以比较“大于”和“小于”值。