Java 通过行值的部分字符串搜索行值的SQL查询
这是我第一次在这里问问题。希望你们能帮忙。我一直在尝试在我的应用程序中执行搜索功能,例如,如果我搜索2016年,2016年的所有日期都将显示在我数据库的JTable上。这是我当前的代码,它只显示列,不显示JTable上的结果:Java 通过行值的部分字符串搜索行值的SQL查询,java,sql,Java,Sql,这是我第一次在这里问问题。希望你们能帮忙。我一直在尝试在我的应用程序中执行搜索功能,例如,如果我搜索2016年,2016年的所有日期都将显示在我数据库的JTable上。这是我当前的代码,它只显示列,不显示JTable上的结果: String searchDate = dateTextField.getText(); String query = "select dateandtime,category,activity from history where dateandtime like '"
String searchDate = dateTextField.getText();
String query = "select dateandtime,category,activity from history where dateandtime like '" + searchDate+ "'";
我试图替换“+searchDate+”“到%'2016%”,它成功了。但我还需要搜索其他年份,所以我需要使用textfield中的文本进行查询。如何执行此操作,以便使用在文本字段中输入的字符串进行搜索并得出结果。您可以通过在引号前后添加%来完成此操作
String query = "select dateandtime,category,activity from history where dateandtime like '%" + searchDate+ "%'";
您可以通过在引号之前和之后添加%
String query = "select dateandtime,category,activity from history where dateandtime like '%" + searchDate+ "%'";
是dateandtime列是日期或时间戳类型。。。为什么要使用字符串比较来查询它 有关日期范围查询的一长串坏习惯,请参阅本博客:
- 是日期,时间列是日期或时间戳类型。。。为什么要使用字符串比较来查询它
有关日期范围查询的一长串坏习惯,请参阅本博客:
类似于
用于字符串,不用于日期
当您对时间戳
(或日期
)列使用LIKE
)时,数据库必须将该日期值转换为字符串,而您无法真正控制用于该列的日期格式。更糟糕的是:这在不同的环境中可能会产生不同的效果。大多数DBMS基于来自客户机应用程序的信息而不是基于服务器配置进行隐式数据类型转换。因此,根据代码运行的位置,您可能会得到不同的结果
您没有指定DBMS,但使用标准SQL时,您应该更喜欢以下内容:
where extract(year from dateandtime ) = 2016
或
其中dateandtime>=日期“2016-01-01”
日期和时间<日期'2016-01-01'
第二条语句的优点是数据库可以对该列使用索引。第一个需要一个特殊的基于表达式的索引
LIKE
表示字符串,不表示日期
当您对时间戳
(或日期
)列使用LIKE
)时,数据库必须将该日期值转换为字符串,而您无法真正控制用于该列的日期格式。更糟糕的是:这在不同的环境中可能会产生不同的效果。大多数DBMS基于来自客户机应用程序的信息而不是基于服务器配置进行隐式数据类型转换。因此,根据代码运行的位置,您可能会得到不同的结果
您没有指定DBMS,但使用标准SQL时,您应该更喜欢以下内容:
where extract(year from dateandtime ) = 2016
或
其中dateandtime>=日期“2016-01-01”
日期和时间<日期'2016-01-01'
第二条语句的优点是数据库可以对该列使用索引。第一个需要一个特殊的基于表达式的索引 像“%”“+searchDate+“%”哇!非常感谢Vincent!这很有效!抱歉,我是SQL新手,但我确实尝试过搜索答案,在询问之前花了我一天的时间。感谢帮助:)像“%”“+searchDate+“%”哇!非常感谢你,文森特!这成功了!对不起,我是SQL新手,我确实尝试过搜索答案,在询问之前花了我一天的时间搜索。谢谢你的帮助:)@DJTan:不要像使用
一样使用来表示日期或时间TIMESTAMPs@DJTan:不要像
一样使用来表示日期或时间戳。我意识到如果我使用字符串查询日期会产生问题,所以我将其改为日期:谢谢。我意识到如果我使用字符串查询日期会产生问题,因此我将其改为日期: