为什么这个SQL(SUBSTR)代码不正确?

时间:2016-11-18 04:05:54

标签: sql

任务: 你能归还所有位于纽约的机器人吗?

enter image description here

我的代码:

SELECT * FROM robots
WHERE SUBSTR(location, LEN(location)-2, 2) = 'NY';

工作代码:

SELECT * FROM robots
WHERE SUBSTR(location, -2, 2) = 'NY';

为什么LEN在我的代码中不能正常工作?

谢谢

3 个答案:

答案 0 :(得分:1)

问题在于according to the documentation

  

启动

     

是一个整数或bigint表达式,指定返回字符的起始位置。 (编号为1,表示表达式中的第一个字符为1)。

因此,SUBSTR("NY, NY", LEN("NY, NY")-2, 2)评估为SUBSTR("NY, NY", 4, 2),即:

NY, NY
123456
   ^^

您返回的字符串为" N",因此SUBSTR(location, LEN(location)-1, 2)仅减1,应该能为您提供正确的结果。

答案 1 :(得分:0)

试试这个。可能是文本前后有一些空间位置。因此在使用子字符串之前修剪文本。

Azure Mobile App

对于Oracle。我们必须使用长度关键字而不是LEN。谢谢: - )

答案 2 :(得分:0)

请注意,对SUBSTR的调用将停止查询选择/使用适当的索引。

 SELECT * FROM robots
 WHERE SUBSTR(location, -2, 2) = 'NY';

在性能方面,您可能会更好地使用

LIKE '%, NY' 
在MS SQL中