【问题标题】:SQL server Exception failed when converting the nvarchar value '2018-10-03' to data type int将 nvarchar 值“2018-10-03”转换为数据类型 int 时 SQL 服务器异常失败
【发布时间】:2019-10-12 21:51:18
【问题描述】:

在java中执行SQL查询时出错 “SQL 服务器异常:com.microsoft.sqlserver.jdbc.SQLServerException:将 nvarchar 值 '2018-10-03' 转换为数据类型 int 时转换失败”

SQL 查询

String MemberId = “103113213”;
String StartDate = ”2019-05-20”;

    select distinct BLRC_CREATE_DTM,BLRC_AMT
    FROM CMC_BLRC_BILL_RCPT D,CMC_SBSB_SUBSC A,CMC_GRGR_GROUP C,CDS_INID_INVOICE B
WHERE A.GRGR_CK = C.GRGR_CK
AND A.SBSB_CK = B.SBSB_CK
AND B.BLEI_CK = D.BLEI_CK
AND A.SBSB_ID IN ('"+MemberId+"')
AND FORMAT(BLRC_CREATE_DTM, 'yyyy-MM-dd') ="+StartDate+"";

【问题讨论】:

  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 (无关,但仍然是一个很好的提示!)
  • SQL 使用DECLARE 创建一个变量并且没有String 数据类型。这看起来像是 C# 和 SQL 的奇怪组合。您也应该对查询进行参数化,而不是注入值。
  • 你能告诉我们你是如何在你的java代码中应用这个查询的吗?
  • 为什么要将日期列转换为字符串以与另一个日期进行比较?

标签: java sql sql-server


【解决方案1】:
String MemberId = “103113213”;
String StartDate = ”2019-05-20”;

    select distinct BLRC_CREATE_DTM,BLRC_AMT
    FROM CMC_BLRC_BILL_RCPT D,CMC_SBSB_SUBSC A,CMC_GRGR_GROUP C,CDS_INID_INVOICE B
WHERE A.GRGR_CK = C.GRGR_CK
AND A.SBSB_CK = B.SBSB_CK
AND B.BLEI_CK = D.BLEI_CK
AND A.SBSB_ID IN ('"+MemberId+"')
AND FORMAT(BLRC_CREATE_DTM, 'yyyy-MM-dd') = CONVERT(date, StartDate);

请确保您只提供输入日期和保存日期。

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2011-08-29
    • 2015-06-20
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多