SQLiteDatabase db = DatabaseProvider.dbHelper.getReadableDatabase();Cursor cursor = db.rawQuery("Select * from " + ConsumerEnquiryTable.TABLE_NAME + " where " + ConsumerEnquiryTable.Cols.USER_LOGIN_ID + "='" + userId + "' AND ( CAST(" + ConsumerEnquiryTable.Cols.DUE_DATE + " as datetime) >= CAST(" + beginDate + " as datetime) AND CAST(" + ConsumerEnquiryTable.Cols.DUE_DATE + " as datetime) <= CAST("+ endDate + " as datetime)) AND " + ConsumerEnquiryTable.Cols.CARD_STATUS + "='" + jobCardStatus + "'", null);我嘗試過使用 CAST、strftime、datetime。due_date 列是 varchar 類型,我想選擇在 beginDate 和 endDate 之間具有到期日期的記錄。所有日期均為 dd/MM/yyyy 格式
2 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
如果您將列的DUE_DATE格式更改YYYY-MM-DD為 SQLite 唯一可比較的格式,那么您只需要一個BETWEEN子句并將所有參數作為字符串數組傳遞,這是避免任何 sql 注入風險的推薦最安全的方法:
Cursor cursor = db.rawQuery(
"SELECT * FROM " + ConsumerEnquiryTable.TABLE_NAME + " WHERE " +
ConsumerEnquiryTable.Cols.USER_LOGIN_ID + " = ? AND (" +
ConsumerEnquiryTable.Cols.DUE_DATE + " BETWEEN ? AND ?) AND " +
ConsumerEnquiryTable.Cols.CARD_STATUS + " = ?",
new String[] {userId, beginDate, endDate, jobCardStatus}
);
當然,參數 beginDate 和 endDate 也必須采用YYYY-MM-DD格式。

慕萊塢森
TA貢獻1810條經驗 獲得超4個贊
您可以使用以下查詢
mDb.query(MY_TABLE, null, DATE_COL + " BETWEEN ? AND ?", new String[] { minDate + " 00:00:00", maxDate + " 23:59:59" }, null, null, null, null);
添加回答
舉報
0/150
提交
取消