我有一个遗留数据库,它将日期存储为纯文本字符串和实际日期。更相关/重要的日期存储为字符串。
对字符串使用GORM非常简单。
我遇到的困难是我需要按日期搜索,并且该日期以两种不同的格式存储为字符串,即" 11/28/2014"和" 11/28/2014 12:00:00 AM"
答案 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,就可以比较“大于”和“小于”值。