错误消息 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
) 与整数值列表(9
和 10
)进行比较。
大概,你的意思是:
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的主要内容,如果未能解决你的问题,请参考以下文章
jsp servlet Etat HTTP 404 [重复]