【问题标题】:How to fix the error - Operand type clash: date is incompatible with int如何修复错误 - 操作数类型冲突:日期与 int 不兼容
【发布时间】:2020-05-31 09:13:42
【问题描述】:
INSERT INTO Buy
SELECT Title
    ,Type1
    ,Tedat
    ,DATEADD(DAY, - 2, DATEADD(YEAR, - 1, Tarikh))
    ,Descrip
FROM Buy
WHERE (
    Tarikh BETWEEN 2019-03-21
    AND 2020-03-19
)

【问题讨论】:

  • constants / literals 上的文档讨论了如何编写所有类型的文字。并停止懒惰。始终在插入语句中指定列列表。当表的结构发生变化时,不要创建更多需要在以后完成的工作。

标签: c# sql sql-server visual-studio


【解决方案1】:

您需要将日期用引号括起来,因为没有引号,它们将被评估为一系列整数,这与您的 WHERE 子句中的日期无法比较:

INSERT INTO Buy 
SELECT      Title,
            Type1,
            Tedat,
            DATEADD(DAY,-2,DATEADD(YEAR,-1,Tarikh)),
            Descrip 
FROM        Buy
WHERE       Tarikh BETWEEN '2019-03-21' AND '2020-03-19'

【讨论】:

    【解决方案2】:

    您缺少日期的引号

     INSERT INTO Buy SELECT  Title,Type1,Tedat,DATEADD(DAY,-2,DATEADD(YEAR,-1,Tarikh)),Descrip FROM Buy
                                    WHERE(Tarikh BETWEEN '2019-03-21' AND '2020-03-19' )
    

    【讨论】:

      【解决方案3】:

      您需要将日期用引号括起来,例如 '2019-03-21' 而不是 2019 - 03 - 21

      INSERT INTO Buy
      SELECT Title
          ,Type1
          ,Tedat
          ,DATEADD(DAY, -2, DATEADD(YEAR, -1, Tarikh))
          ,Descrip
      FROM Buy
      WHERE Tarikh BETWEEN '2019-03-21' AND '2020-03-19'
      

      此外,您应该指定列以避免意外错误(插入不正确的列或只想插入多个列而不是全部)

      INSERT INTO Buy(column1, column2,.. )
      SELECT  Title, Tedat, .. 
      FROM    Buy
      

      阅读以下文章以更好地理解

      Insert into certain columns

      【讨论】:

      • 这能回答你的问题吗?如果您需要任何帮助,请告诉我@Rozbeh
      猜你喜欢
      • 2021-04-15
      • 1970-01-01
      • 2014-03-01
      • 2019-10-31
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多