Varchar 类型等于数字

Varchar type equals numeric

我在 SQL 服务器中创建了 table 服务器:

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'

当您将字符串与数字进行比较时,字符串 将转换为数字。这是根据 SQL.

的规则

这通常会导致转换错误。因此,如果无法转换任何值,您可能会收到错误消息。当这些发生在隐式转换时,它们真的很难找到。所以,我强烈建议避免隐式转换。

隐式转换也会使优化器更难识别适当的索引,从而影响性能。

最佳解决方案是使用正确的类型存储数据。如果没有前导零且值为数字,则将其存储为数字。

否则,请确保比较的是字符串:registrationNumber = '20012'