我的数据格式为yyyy-MM-dd hh:mm:ss.
。它以文本形式存储。
我想要一个与给定日期相匹配的查询(yyyy-MM-dd
)。
E.g
Select * from test where test MATCH '2014-03-30*'
当我尝试时,它会返回除2014年3月之外的所有数据。
如果我尝试
Select * from test where test MATCH '2014-04-30*'
它返回除2014年4月之外的所有数据。
我很困惑!...我正在得到与我想要的相反的东西!
出现这种奇怪行为的原因是什么?
这是我的完整代码....测试日期模式
public List <Transactions> GetTransactionsVirtual(String token)
{
List<Transactions> trans = new ArrayList<Transactions>();
SQLiteDatabase db;
String sql= " Select " + MESSAGE + "," + TDATE + ","+ SERVICE_PROVIDER +
" from " + TABLE_NAME_VIRTUAL + " Where "+ TABLE_NAME_VIRTUAL + " MATCH " + "?" +
" Order by " + TDATE + " DESC";
//check entered string...if date string strip it ..
String pattern="^(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$";
String tokenedit=null;
String newtoken=null;
if (token.matches(pattern))
{
tokenedit= token.replace("-", " ");
Log.e("testtoken", tokenedit);
newtoken = tokenedit+"*" ;
}else
{
newtoken= token+ "*";
}
String [] args= new String[]{newtoken};
Log.e("sqlamatch", sql);
db= this.getReadableDatabase();
Cursor c = db.rawQuery(sql, args);
if(c.moveToFirst())
{
do{
Transactions t=new Transactions();
t.setTransactiondate(c.getString(c.getColumnIndex(TDATE)));
t.setMessage(c.getString(c.getColumnIndex(MESSAGE)));
t.setServiceprovider(c.getString(c.getColumnIndex(SERVICE_PROVIDER)));
//Log.e("msg",t.getMessage().toString());
trans.add(t);
}while(c.moveToNext());
}
return trans;
}
答案 0 :(得分:0)
全文搜索机制专为搜索文本中的单词而设计。
使用默认tokenizer,日期(yyyy
,MM
,dd
)的三个字段将被解析为单个独立字词,并且分隔符将被忽略
像2014-03-30*
这样的FTS查询会搜索
2014
和03
和30
开头的任何字词。您需要执行phrase search:
SELECT * FROM test WHERE test MATCH '"2014 03 30"'
如果您的所有数据都具有固定格式,则不应首先使用FTS表。