2011-08-12 73 views
1

我想將字符串格式的日期轉換爲sql日期並基於該查詢數據庫來獲得結果。 日期字符串格式爲:2011-08-11 09:16:00.0 所以我使用的方法將其轉換爲SQL DATE:字符串日期轉換問題

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

「斯汀」是一個老搖滾明星。你可能是指「字符串」 ... –

+3

爲什麼至今存儲爲字符串在DB –

+1

作爲Jigar Joshi說,你應該存儲日期爲你的數據庫 – njzk2

回答

0

Date對象本身並不格式,但它僅返回日期和時間價值。你可以得到僅格式支持類字符串格式一樣的SimpleDateFormat格式,日期格式等

0

您想使用的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.htmlhttp://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

它給錯誤: – Hussy

+0

groovy.lang.MissingMethodException:法無簽名:com.springpeople.steer.trips.TripController.after()是適用於爭論類型:(java.lang.String,java.sql.Date)values:[contract_begins,2011-08-12] – Hussy

+0

我修復了代碼 - 沒有嘗試過,但它可以:-) – sbglasius