【问题标题】:Operand type clash: int is incompatible with date操作数类型冲突:int 与日期不兼容
【发布时间】:2016-07-09 11:15:40
【问题描述】:

我有一个 select 语句,它将我的日期列转换为 varchar,然后转换为在 SSMS 中工作的 int,并给出了我想看到的结果。在 SSIS 中它开始抛出错误,所以我决定在我的 select 语句中使用表变量并将数据发送到那里,然后使用该数据使用 SSIS 数据流将其插入到我的主表中。

我的选择语句给出了错误:

Msg 206, Level 16, State 2, Line 71
Operand type clash: int is incompatible with date

我的 Select 语句是:

DECLARE @Order TABLE (
    [OrderCode] [INT] NOT NULL,
    [PersonCode] [BIGINT] NOT NULL,
    [OrderDateTimeBase] [INT] NULL,
    [OrderlineCreateDate] [INT] NOT NULL,
    [OrderlineDateTimeBase] [INT] NULL,
    [OrderlineDateBase] [DATE] NULL,
    [BackOrderPromiseDate] [INT] NULL,
    [CancelDate] [INT] NULL,
    [DespatchedDate] [INT] NULL,
    [ReturnDate] [INT] NULL,
    [ExchangeDate] [INT] NULL
);

INSERT INTO @Order
SELECT
      CAST(LEFT(o.[personCode]
    , CHARINDEX('~', o.[personCode]) - 1) AS BIGINT) AS 'PersonCode'
    , CONVERT(INT, CONVERT(VARCHAR(8), o.[OrderDatetimeBase], 112)) AS 'OrderDateTimeBase'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[OrderlineCreateDate], 112)) AS 'OrderlineCreateDate'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[OrderlinedatetimeBase], 112)) AS 'OrderlinedatetimeBase'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[OrderlineDateBase], 112)) AS 'OrderlineDateBase'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[BackOrderPromiseDate], 112)) AS 'BackOrderPromiseDate'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[CancelDate], 112)) AS 'CancelDate'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[DespatchedDate], 112)) AS 'DespatchedDate'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[ReturnDate], 112)) AS 'ReturnDate'
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[ExchangeDate], 112)) AS 'ExchangeDate'
FROM dbo.A ol
INNER JOIN dbo.B o ON o.orderID = ol.orderID;

SELECT * FROM @Order

【问题讨论】:

  • 这是 SQL Server 吗?你能用那个标记你的问题吗?
  • 不是sql吗?但是好的,对此感到抱歉
  • @Faiz,SQL 是一种查询语言,而不是一种产品。 MS SQL Server 是支持 SQL 语言的众多产品之一。
  • 您将值转换为INT,同时尝试将INSERT 转换为DATE 列(OrderlineDateBase)。
  • 啊,愚蠢的错误,我认为我的代码不正确。下次我会检查这一切,以免因我的错而浪费其他人的时间。谢谢

标签: sql-server


【解决方案1】:

您的某些字段(如 OrderlineCreateDate)不是 date 而是 int 类型。但是CONVERT(VARCHAR(8), field, 112) 期望fielddate,所以存在数据类型冲突。

如果这些字段真的是int 类型,可能会想知道为什么要将它们转换为varchar,然后再转换回int

然后您将它们插入到一个期望它们为date 的表中。

【讨论】:

    【解决方案2】:

    您的问题的实质已经解决,但我还要补充一点,我遇到了这个错误,因为我从一个仅包含 NULL 的日期列开始。

    当我稍后尝试插入该列的数据时,我猜想期望实际日期值的列将 NULL 解释为 int(或以其他方式混淆)。我不确定 NULL 每次都会导致此错误,但如果您看到此错误,请检查一下。

    【讨论】:

    • 即使日期列可以为空也会发生这种情况?
    • 谢谢,这是个好问题。我不记得当日期列可以为空时是否发生了错误,但如果我能挖掘出我遇到问题的原始查询,我会对其进行测试。
    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多