Проблема с преобразованием строки в дату - PullRequest
1 голос
/ 12 августа 2011

Я пытаюсь преобразовать дату в формате String в дату sql и на основе этой базы данных запросов получить результат.Дата в строковом формате: 2011-08-11 09:16:00.0 Поэтому я конвертирую ее в дату sql, используя метод:

public static convertStringToSqlDate(String dateString){
    DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date parsedUtilDate = formater.parse(dateString);
    java.sql.Date sqlDate= new java.sql.Date(parsedUtilDate.getTime());
    return sqlDate;
}

Полученная дата: 2011-08-11

, но при этомзапрос Я не получаю желаемый вывод

Полный код:

def startDate = params. startDate
def endDate = params. endDate
def formattedTripStartDate  =Trip.convertStringToSqlDate(startDate);
def formattedTripEndDate    =Trip.convertStringToSqlDte(endDate);
def listOfContracts = Rule.findAll("FROM Rule WHERE name LIKE ? AND client_id = ? AND STR_TO_DATE(contract_begins,'%Y-%m-%d')<= ? AND STR_TO_DATE(contract_terminates,'%Y-%m-%d')>= ?",["%"+q_param+"%",clientId,formattedTripStartDate,formattedTripEndDate] )

Куда я иду не так?

В базе данных contract_begins хранится как: 2011-08-23 00: 00: 00

Контрактный домен Класс

class Contract extends Rule {

Date    contractBegins
Date    contractTerminates
int     runningDays
Double  contractValue
Double  estimatedRevenue
Double  actualRevenue
static constraints = {
    contractBegins(nullable:true)
    contractTerminates(nullable:true)
    runningDays(nullable:true)
    contractValue(nullable:true)
    estimatedRevenue(nullable:true)
    actualRevenue(nullable:true)
}
  }

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Почему вы хотите использовать запрос findAll, а не критерии.Что-то вроде этого должно сделать это:

def startDate = params.startDate
def endDate = params.endDate
def tripStartDate=Trip.convertStringToSqlDate(startDate);
def eripEndDate=Trip.convertStringToSqlDte(endDate);

def c = Contract.createCriteria()
def results = c.list {
    like("name", "%${q_param}%")
    eq("client_id", clientId) 
    ge('contract_begins', tripStartDate)
    le('contract_terminates','tripEndDate) 
}

Это намного чище, и вам не нужно беспокоиться о том, как выглядит SQL!

Погрузитесь в http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html и http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.4.2 Критерии, в которых вы можете найти гораздо больше информации.

Также рассмотрите возможность сделать свой код еще лучше, добавив критерии в именованные запросы класса домена: http://grails.org/doc/latest/ref/Domain%20Classes/namedQueries.html

0 голосов
/ 12 августа 2011

Объект даты не форматируется сам по себе, он возвращает только значение даты и времени.Вы можете получить форматирование только классом Format поддерживается в строковом формате, например SimpleDateFormat, DateFormat и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...