我正在使用带有VB.NET /ODBC的PostgreSQL,并且必须构造一个复杂的查询字符串 这是简化版本:
SELECT dtbl_id,idx,name,meas,code,year FROM mytable 名称ILIKE'nemo%'< - 编辑 AND(dtbl_id在1和9999之间)
或(dtbl_id BETWEEN 15000和19999)按名称排序
我也试试:
AND(dtbl_id BETWEEN 1和9999)
AND(dtbl_id BETWEEN 15000和19999)按名称排序
我试图获取以“nemo”开头的名称,但前提是它们的索引介于1和9999之间,索引介于15000和19999之间。 在这两种情况下,我都没有得到理想的结果(如果有的话)。
我的查询有什么问题?
答案 0 :(得分:1)
尝试:
SELECT dtbl_id, idx, name, meas, code, year
FROM mytable
WHERE name ILIKE '%nemo'
AND ((dtbl_id BETWEEN 1 AND 9999)
OR (dtbl_id BETWEEN 15000 AND 19999))
ORDER BY name
详情here。
错误 - OR
的优先级低于AND
。因此,您的第一个WHERE
子句如下所示:
WHERE (name ILIKE '%nemo' AND dtbl_id BETWEEN 1 AND 9999)
OR (dtbl_id BETWEEN 15000 AND 19999)
另一个错误(正如Edmund所指出的) - 要使用nemo
获取名称开始,您需要ILIKE 'nemo%'
。
答案 1 :(得分:1)
主要问题是“以nemo开头”最好使用条件name ILIKE 'nemo%'
获得 - 请注意%
通配符在最后。将它放在开头搜索名称以nemo结尾!
第二个问题是OR
和AND
运算符的优先级,正如Igor所指出的那样。如他所示,将括号括在后两个条款中。