varchar类型等于numeric

xam8gpfp  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(357)

我已在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'

奇怪的是 registrationNumbervarchar 数据类型和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'
yizd12fk

yizd12fk1#

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

相关问题