PostgreSQL组成复杂的查询字符串

时间:2012-12-12 22:05:24

标签: postgresql

我正在使用带有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之间。 在这两种情况下,我都没有得到理想的结果(如果有的话)。

我的查询有什么问题?

2 个答案:

答案 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结尾

第二个问题是ORAND运算符的优先级,正如Igor所指出的那样。如他所示,将括号括在后两个条款中。