varchar类型等于numeric

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

我已在sql server中创建了表:

  1. create table tblVehicleRegistration (
  2. vehicleid int identity(1,1) primary key,
  3. registrationNumber varchar(5),
  4. registrationDate date,
  5. userId int
  6. )

并执行如下查询:

  1. select UserId from tblVehicleRegistration
  2. where registrationNumber = 20012
  3. and registrationDate > '2016-01-01'

奇怪的是 registrationNumbervarchar 数据类型和20012是 numeric ,但执行查询。这样写的查询错了吗?实际上这是70-761考试的试题,我需要知道你的意见。这些呢:

  1. select UserId from tblVehicleRegistration
  2. where cast(registrationNumber as int) = 20012
  3. and registrationDate > '2016-01-01'
  4. select UserId from tblVehicleRegistration
  5. where registrationNumber = '20012'
  6. and registrationDate > '2016-01-01'
yizd12fk

yizd12fk1#

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

相关问题