错误消息 206、Niveau 16、État 2、Ligne 91 Conflit de types d'opérandes:date est 不兼容 avec tinyint

Posted

技术标签:

【中文标题】错误消息 206、Niveau 16、État 2、Ligne 91 Conflit de types d\'opérandes:date est 不兼容 avec tinyint【英文标题】:Error Msg 206, Niveau 16, État 2, Ligne 91 Conflit de types d'opérandes : date est incompatible avec tinyint错误消息 206、Niveau 16、État 2、Ligne 91 Conflit de types d'opérandes:date est 不兼容 avec tinyint 【发布时间】:2020-08-18 22:56:28 【问题描述】:

我收到一个错误:

错误消息 206、Niveau 16、État 2、Ligne 91 Conflit de types d'opérandes:date est 不兼容 avec tinyint

代码:

CREATE TABLE reservation 
(
    codres int PRIMARY KEY IDENTITY(1,1),
    numcl int FOREIGN KEY REFERENCES client ,
    numt int FOREIGN KEY REFERENCES typesejour,
    codho int FOREIGN KEY REFERENCES hotel,
    datedebut date,
    datefin date,
    montant float DEFAULT 0,

    CONSTRAINT ck CHECK (datefin > datedebut)
)

ALTER TABLE reservation 
    ADD CONSTRAINT ch1 DEFAULT 0 FOR montant;

UPDATE reservation 
SET montant = 0.9 * montant
WHERE MONTH(datedebut) IN (9, 10) 
  AND (datefin) IN (9, 10);

【问题讨论】:

【参考方案1】:

这是update 语句的where 子句:

where month(datedebut) in (9,10) and (datefin) in (9,10)

第二个条件引发错误,因为您试图将 date (datefin) 与整数值列表(910)进行比较。

大概,你的意思是:

where month(datedebut) in (9,10) and month(datefin) in (9,10)

请注意,像这样比较日期效率非常低。尽可能使用直接日期比较要好得多。假设您想要去年的 9 月和 10 月,您可以这样写:

where 
        datedebut >= '20190901'
    and datedebut <  '20191101'
    and datefin   >= '20190901'
    and datefin   <  '20191101'

当然,如果您想要任何一年的 9 月和 10 月,那么您的表达方式就是正确的选择。

【讨论】:

附加信息:20190901 对应于 ISO8601 的 YYYYMMDD 。 en.wikipedia.org/wiki/ISO_8601

以上是关于错误消息 206、Niveau 16、État 2、Ligne 91 Conflit de types d'opérandes:date est 不兼容 avec tinyint的主要内容,如果未能解决你的问题,请参考以下文章

卸载redmine

jsp servlet Etat HTTP 404 [重复]

206年3月16日作业。

Pytorch:W ParallelNative.cpp:206

XMLéè | 艾米尔秋冬献礼,10月16日优雅亮相

警报消息未正确显示