我正在用java编写一个应用程序,它接收请求并将它们保存到文件中, 然后它可以搜索旧的请求。
我开始升级我的应用程序以使用MySQL而不是普通的Txt文件。
我正在寻找一种以下列方式查询数据库的方法:
我正在寻找在(特定日期) - 首次搜索中打开的请求,其中包含单词xxx - 第二次搜索
我找到了这个查询:
SELECT * FROM requestserverdb.closedrequests WHERE ClosingTimeStamp LIKE "%2014-09-01%"
OR ClosingTimeStamp LIKE "%2014-09-02%" ;
这给了我在这些日期创建的所有行, 我希望查询只返回包含特定单词的这些结果中的行...
例如:
此查询将返回:
1,班纳巴,我想活着,2014-09-01
6,apple,woo hoo,2014-09-02
7,芒果,沟在心里,2014-09-02我需要一个查询,该查询只返回其中一列中包含单词“apple”的行:
6,apple,woo hoo,2014-09-02
答案 0 :(得分:1)
您的查询是搜索日期时间的一种非常糟糕的方式。以下是更好的一点:
SELECT *
FROM requestserverdb.closedrequests
WHERE date(ClosingTimeStamp) = '2014-09-01' OR date(ClosingTimeStamp) = 2014-09-02';
如果时间戳没有时间组件,则删除date()
功能。仅对字符串使用like
。
更好的方法是:
SELECT *
FROM requestserverdb.closedrequests
WHERE ClosingTimeStamp >= '2014-09-01' AND ClosingTimeStamp < 2014-09-03';
后者将允许引擎使用ClosingTimeStamp
上的索引。
如果您想添加其他条件,只需添加:
SELECT *
FROM requestserverdb.closedrequests
WHERE ClosingTimeStamp >= '2014-09-01' AND ClosingTimeStamp <= 2014-09-03' AND
col2 = 'Apple';
SQL没有为另一个查询保存查询结果的内置概念。您可以实现此类功能,但您的应用程序可能不需要它。您只需为where
子句添加条件。
答案 1 :(得分:0)
使用嵌套的SELECT。但是内部SELECT不应该使用*,以便可以从外部SELECT引用该列。
SELECT col_1 (SELECT col_1, col_2 FROM requestserverdb.closedrequests WHERE ClosingTimeStamp LIKE "%2014-09-01%" OR ClosingTimeStamp LIKE "%2014-09-02%") WHERE col_1 LIKE "%XXX%";
对此产生影响。
答案 2 :(得分:0)
为什么不搜索包含苹果这个词的记录,而不是搜索日期?另一种方式可能是有2个WHERE条件。一个包含日期和一个包含Apple
的词