【问题标题】:conversion from int to DATE is unsupported on null date空日期不支持从 int 到 DATE 的转换
【发布时间】:2023-03-30 04:29:01
【问题描述】:

我相信这是 SQL 2000/2005 中的一个错误/问题......如果我的结果在 DATETIME 列上为空,我会得到

com.microsoft.sqlserver.jdbc.sqlserverexception: 
 the conversion from int to date is unsupported

当我使用sql.getDate("ColumnName") ... 有什么解决办法吗?

[编辑] 大家好,感谢您的输入,下面是我的 SQL 查询

select p.planno            as PlanNumber, 
       t.TrancheID         as TrancheID, 
       t.tranchestartdate  as TrancheStartDate, 
       t.tranchereasoncode as TrancheReasonCode, 
       ai.ArrayItemDecode  TrancheReasonDescription, 
       t.trancheuwstage    as UnderwritingStatusCode 
from   plan_ p 
       inner join tranche t 
         on t.planno = p.planno 
            and t.trancheuwstage in ( 2, 4 ) 
            and p.planno = '040000000X6' 
       inner join arrayitem ai 
         on ai.ArrayNm = 'arrTraReas' 
            and ai.ArrayItemCode = t.tranchereasoncode;  

这里的罪魁祸首是 tranchestartdate,它是一个 DATETIME。我不能向表中添加任何内容,因为我不允许更改现有的表结构,这是一个大系统。也许我可以在我的 SQL 中进行强制转换?我不太确定这是否绝对是一个空问题。在我调用 getDate() 之前,可以调试/观察 ResultSet 并检查是否检索到任何数据? [/EIDT]

【问题讨论】:

  • 没有null 日期?
  • JDBC 认为该列是 int 肯定是有原因的。您确定 SQL 字段不是 TIMESTAMP 数据类型吗?
  • @詹姆斯。没有任何转换的 NULL 文字被 SQL Server 视为 int,但 int 确实转换为 datetime OK。 SELECT CAST(0 AS DATETIME) 提供1900-01-01 00:00:00.000SELECT CAST(CAST(NULL AS INT) AS DATETIME) 提供NULL

标签: java sql-server jdbc


【解决方案1】:

如果您的应用程序(或驱动程序)无法处理空日期,那么最简单的方法可能是使用 ISNULL(field, ) 并检查代码中的空替换日期。这种方法使用一个幻数(日期)来表示空值,true。它并不漂亮,但它快速而直接。

【讨论】:

    【解决方案2】:

    你不能为此使用合并吗?

    http://msdn.microsoft.com/en-us/library/ms190349.aspx

    【讨论】:

      【解决方案3】:

      您是从字段中选择日期时间还是在 SELECT 中动态构建它?您可能需要CAST 结果。

      this article

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 2021-09-26
        相关资源
        最近更新 更多