在参数化查询中使用CONVERT

simonalexander2005:

我有一些与Oracle数据库进行交互的Java代码,并将其转换为与SQL Server一起使用。

代码是:

String parameterisedSQL = "INSERT INTO T(a,b) VALUES (?,?)";
try (Connection con = DriverManager.getConnection(connectionString, databaseUser, databasePassword);
PreparedStatement stmt = con.prepareStatement(parameterisedSQL);)
{       
    stmt.setString(0,"test");
    stmt.setString(1,"CONVERT(DATE, '20201230', 112)");

    stmt.executeUpdate();
    return true;
} 

显然,当它是Oracle代码时,代码读取 stmt.setString(1,"TO_DATE('20201230','YYYYMMDD')");

针对Oracle数据库的Oracle代码工作正常,但是现在我针对SQL Server数据库运行SQL Server代码,但出现异常

从字符串转换日期和/或时间时转换失败

据此,我假设SQL Server无法正确地将CONVERT解析为参数。有什么办法可以做到这一点?(我的代码实际上比显示的代码更具通用性,因此很难使用.setDate等)。

Venkataraman R:

@forpas提供了详细的答案。

此外,根据您的情况,在插入表之前,无需转换短日期格式(ISO8601)。您可以直接插入。

关于ISO8601日期格式

ISO 8601说明YYYY-MM-DD

YYYYMMDD与SQL标准相同。该格式是唯一定义为国际标准的格式。

declare @TABLE table(T date)

insert into @TABLE (T) VALUES('20201230')

SELECT * FROM @table

对于你的情况

stmt.setString(0,"test");
stmt.setString(1,"20201230");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章