任务: 你能归还所有位于纽约的机器人吗?
我的代码:
SELECT * FROM robots
WHERE SUBSTR(location, LEN(location)-2, 2) = 'NY';
工作代码:
SELECT * FROM robots
WHERE SUBSTR(location, -2, 2) = 'NY';
为什么LEN在我的代码中不能正常工作?
谢谢
答案 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中。