我已在sql 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'
1条答案
按热度按时间yizd12fk1#
将字符串与数字进行比较时,字符串将转换为数字。这是sql的规则。
通常,这会导致转换错误。因此,如果任何一个值不能被转换,您可能会得到一个错误。当这些发生在隐式转换上时,很难找到它们。所以,我强烈建议避免隐式转换。
隐式转换也会影响性能,使优化器更难识别适当的索引。
最好的解决方案是使用正确的类型存储数据。如果没有前导零且值是数字,则将其存储为数字。
否则,请确保比较是一个字符串:
registrationNumber = '20012'
.