我已经在Server中创建了表:
create table tblVehicleRegistration (
vehicleid int identity(1,1) primary key,
registrationNumber varchar(5),
registrationDate date,
userId int
)并执行以下查询:
select UserId from tblVehicleRegistration
where registrationNumber = 20012
and registrationDate > '2016-01-01'奇怪的是,registrationNumber是varchar数据类型,20012是numeric,但是查询是执行的。这样写的查询有错吗?实际上,这是70-761考试的试题,我需要知道你的看法.这些东西呢?
select UserId from tblVehicleRegistration
where cast(registrationNumber as int) = 20012
and registrationDate > '2016-01-01'
select UserId from tblVehicleRegistration
where registrationNumber = '20012'
and registrationDate > '2016-01-01'发布于 2020-06-04 00:25:16
将字符串与数字进行比较时,字符串将转换为数字。这是根据SQL的规则进行的。
这通常会导致转换错误。因此,如果无法转换任何值,则可能会出现错误。当这些发生在隐式转换时,它们确实很难找到。因此,我强烈建议避免隐式转换。
隐式转换还会使优化器更难识别适当的索引,从而影响性能。
最好的解决方案是使用正确的类型存储数据。如果没有前导零且值是数字,则将其存储为数字。
否则,请确保比较是字符串:registrationNumber = '20012'。
https://stackoverflow.com/questions/62184878
复制相似问题