SQL Query通过行值的部分字符串搜索行值

时间:2016-10-13 03:58:20

标签: java sql

这是我第一次在这里提问。希望你们能帮忙。我一直在尝试在我的应用程序中执行搜索功能,例如,如果我搜索2016年,2016年的所有日期将显示在我的数据库中的JTable上。这是我当前的代码,它只显示列,而JTable上没有结果:

String searchDate = dateTextField.getText();
String query = "select dateandtime,category,activity from history where dateandtime like '" + searchDate+ "'";

我试图取代'" + searchDate +"'"至%' 2016'%并且它有效。我需要搜索其他年份,所以我需要使用文本字段中的文本进行查询。如何进行此操作,以便我可以使用在文本字段中输入的字符串进行搜索并得出结果。

3 个答案:

答案 0 :(得分:2)

你可以通过在引号

之前和之后添加%来实现
String query = "select dateandtime,category,activity from history where dateandtime like '%" + searchDate+ "%'";

答案 1 :(得分:0)

dateandtime列是DATE还是TIMESTAMP类型...为什么要使用字符串比较查询它?

请参阅此博客,了解日期范围查询中的一系列不良习惯:

答案 2 :(得分:0)

LIKE适用于字符串,适用于日期。

当您对LIKE(或TIMESTAMP)列使用DATE时,数据库必须将该日期值转换为字符串 - 而您无法真正控制该格式用于此的日期。更糟糕的是:这可能在不同的环境中有所不同。大多数DBMS基于来自客户端应用程序的信息进行恶意隐式数据类型转换,而不是基于服务器配置。因此,根据代码的运行位置,您可能会得到不同的结果。

您没有指定DBMS,但使用标准SQL时,您应该更喜欢这样的内容:

where extract(year from dateandtime ) = 2016

where dateandtime >= date '2016-01-01' 
  and dateandtime < date '2016-01-01'

第二个语句的优点是数据库可以使用该列的索引。第一个需要基于特殊表达式的索引。