在 SQLite 中比较日期的问题
Troubles in comparing dates in SQLite
我正在尝试将当前日期与存储在 SQLite 数据库列中的另一个日期进行比较,select 这些日期之间的每一行。
我不明白为什么我的查询不起作用。
@Override
public int getFamiliesClientsTotalNum() {
String countQuery = "SELECT * FROM " + SQLiteHelper.FAMILIES_SERVICES_TABLE_TITLE + " WHERE DATE("
+ SQLiteHelper.FAMILIES_SERVICES_DATE
+ ") >= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate)
+ "') AND DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE
+ ") <= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mFinishDate) + "')";
Cursor cursor = mSQLiteHelper.getReadableDatabase().rawQuery(countQuery, null);
int cnt = 0;
while(cursor.moveToNext()){
Log.i(TAG, "countQuery: " + countQuery);
Log.i(TAG, "today is: " + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate));
cnt++;
}
cursor.close();
return cnt;
}
它不起作用,因为您传递的是 value
(由 Date()
函数返回)而不是 column name
:
... DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE + ") ...
这就像写作
... WHERE Date(MyDateColumn) = '2016-04-08' ...
确实一定是这样的:
..." + SQLiteHelper.FAMILIES_SERVICES_DATE + "...
不使用 Date()
函数。
这就像(正确地)写
... WHERE MyDateColumn = '2016-04-08' ...
注意:您在查询中犯了两次同样的错误。
[编辑]
使用 BETWEEN ... AND ...
运算符要好得多(也更易于阅读),用于指定日期范围:
... WHERE MyDateColumn BETWEEN '2015-04-08' AND '2016-04-08' ...
我正在尝试将当前日期与存储在 SQLite 数据库列中的另一个日期进行比较,select 这些日期之间的每一行。
我不明白为什么我的查询不起作用。
@Override
public int getFamiliesClientsTotalNum() {
String countQuery = "SELECT * FROM " + SQLiteHelper.FAMILIES_SERVICES_TABLE_TITLE + " WHERE DATE("
+ SQLiteHelper.FAMILIES_SERVICES_DATE
+ ") >= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate)
+ "') AND DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE
+ ") <= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mFinishDate) + "')";
Cursor cursor = mSQLiteHelper.getReadableDatabase().rawQuery(countQuery, null);
int cnt = 0;
while(cursor.moveToNext()){
Log.i(TAG, "countQuery: " + countQuery);
Log.i(TAG, "today is: " + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate));
cnt++;
}
cursor.close();
return cnt;
}
它不起作用,因为您传递的是 value
(由 Date()
函数返回)而不是 column name
:
... DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE + ") ...
这就像写作
... WHERE Date(MyDateColumn) = '2016-04-08' ...
确实一定是这样的:
..." + SQLiteHelper.FAMILIES_SERVICES_DATE + "...
不使用 Date()
函数。
这就像(正确地)写
... WHERE MyDateColumn = '2016-04-08' ...
注意:您在查询中犯了两次同样的错误。
[编辑]
使用 BETWEEN ... AND ...
运算符要好得多(也更易于阅读),用于指定日期范围:
... WHERE MyDateColumn BETWEEN '2015-04-08' AND '2016-04-08' ...