修复SQL where丑陋且令人困惑的语句

Mik*_*lls 3 sql sql-server

我直接查询后端MS SQL Server的软件包.虽然我们在字段中输入数值,但关键字段(车辆编号)被定义为alpha.这只有一个例外,我们在车辆退役时在号码前加上"R"(这意味着我们将其出售或车辆被废弃).假设用户这样做,我们不应该使用此方法遇到问题.(对或错不是问题)

快进到现在.我正在尝试查询这些车辆编号的子集(800 - 899)以进行一些特殊处理.通过做'800'到'899'的范围,我们也得到80,81等.如果我将车辆编号投入INT,我应该能够获得正确的范围.除了这些"R"车辆现在踢我的屁股.

where vehicleId not like 'R%' and cast(vehicleId as int) between 800 and 899不过我试过,我在其中一辆"R"车上出现了投射错误.

工作是什么where vehicleId not between '800' and '899' and cast(vehicleId as int) between 800 and 899',但我觉得必须有更好的方式和更少混乱的方式.

我还尝试了其他变种HAVING和子查询都产生了投射错误.

Fal*_*234 6

虽然未经测试,但这应该可以解决问题:

where cast(replace(vehicleId,'R','') as int) between 800 and 899
Run Code Online (Sandbox Code Playgroud)


Dol*_*lph 5

使用_运算符而不是%运算符:

WHERE vehicleId LIKE 'R8__' OR vehicleId LIKE '8__'
Run Code Online (Sandbox Code Playgroud)

您也可以将它们组合起来:

WHERE vehicleId LIKE '%8__'
Run Code Online (Sandbox Code Playgroud)