我直接向后端MS SQL Server查询软件包。关键字段(vehicle number)被定义为alpha,尽管我们在该字段中输入了数值。只有一个例外,当车辆退役时,我们在数字前面放一个"R“(这意味着我们把它卖了,或者这辆车是废弃的)。假设用户这样做是正确的,我们应该不会在使用这种方法时遇到问题。(对或错不是这里的问题)
快进到现在。我正在尝试查询这些车辆编号(800 - 899)的子集,以进行一些特殊处理。通过做一个从'800‘到'899’的范围,我们也可以得到80,81等。如果我将车辆编号转换成一个整数,我应该能够得到正确的范围。除了这些"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和一个子查询的其他变体,所有这些都会产生强制转换错误。
发布于 2010-05-14 05:33:00
不能保证优化器将以正确的顺序执行这些操作(SQL中目前没有短路评估):
where vehicleId not like 'R%' and cast(vehicleId as int) between 800 and 899 因此,强制转换可能会失败。
试试这个:
WHERE
CASE
WHEN vehicleId NOT LIKE 'R%' THEN
CAST(vehicleId as int)
ELSE
0
END BETWEEN 800 AND 899 https://stackoverflow.com/questions/2830373
复制相似问题