【问题标题】:How to convert string to date in sql query?如何在sql查询中将字符串转换为日期?
【发布时间】:2012-08-08 05:08:01
【问题描述】:

我正在使用 MS-SQL Server。我在Convert 附近遇到了一个异常。这是我的查询:

String query1="select * from pat.dbo.Demand_Register 
               where (select (Convert (datetime,Payment_Date,103)) as pd 
                      from pat.dbo.Demand_Register)
                  between '"+frmDate1+"' and '"+toDate1+"' ";

还有例外:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Syntax error converting datetime from character string.

【问题讨论】:

  • 首先你少了双引号,应该是这样的'" + frmDate1 + "'
  • java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]从字符串转换日期时间的语法错误发生此异常。

标签: java sql sql-server jdbc


【解决方案1】:

这可能是因为您使用单引号连接字符串,因此也应该使用双引号;看看你如何在你的字符串中组合frmDate1toDate1 参数。

所以这应该可以工作

String query1 = "select * from pat.dbo.Demand_Register where (select  (Convert(datetime,Payment_Date,103)) as pd from pat.dbo.Demand_Register) between '" + frmDate1 + "' and '" + toDate1 + "' ";

【讨论】:

  • 这是一个很好的观察结果,通常很难找到,但我想这可能不是重点,因为他的 IDE(如果他正在使用的话)可能会让他很明显
【解决方案2】:

您的陈述不必要的复杂,您可以将其简化为:

String query1="select * from pat.dbo.Demand_Register " +
               "where Convert (datetime,Payment_Date,103) " + 
               "between '"+frmDate1+"' and '"+toDate1+"' ";

但这仍然不是一个好主意。您应该从 frmDate1toDate1 构造 java.sql.Date 实例并在 PreparedStatement 中使用它们:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
java.sql.Date from = new java.sql.Date(sdf.parse(frmDate1));
java.sql.Date to = new java.sql.Date(sdf.parse(toDate1));
String query1="select * from pat.dbo.Demand_Register " +
               "where Payment_Date between ? and ?";
PreparedStatement stmt = connection.prepareStatement();
stmt.setDate(1, from);
stmt.setDate(2, to);
ResultSet rs = stmt.executeQuery();

这不仅可以保护您免受 SQL 注入,还可以更快地使用Payment_Date 上的潜在索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多