How do I select multiple features in a vector layer using the Query Builder in QGIS?

Using U.S. Census geographic data, I'm trying to select a large number of specific block groups using the GEOID feature / field.

Based on an answer found here and using the LIKE operator, I've used the following query in the Query Builder:

"GEOID" ILIKE ('34013000100%', '34013000200%')

This results in error:

OGR[3] error 1: SQL Expression Parsing Error: syntax error, unexpected ','.

I've also tried using the LIKE and IN operators; changing the wildcard from % to _ (a single underscore); and other separators replacing the comma, all with error results.

I note that filtering for a single value (such as "GEOID" ILIKE ('34013000100%') works fine.

A sample data file is found here.

  • Try using an IN statement: "GEOID" in ('1234', '4534', '3454', '34652') – DPSSpatial Sep 16 at 16:49
  • @DPSSpatial When using the IN operator, i.e., "GEOID" IN ('34013000100%') or "GEOID" IN ('34013000100_'), QGIS returns no attributes but substituting IN with LIKE returns the expected attributes. – Catalyx Sep 16 at 18:48

Try writing a multiple LIKE statement with the values you're trying in an IN statement.

In the image below, there are 2 sets of selected features for each LIKE statement (highlighted in pink):

"GEOID" like ('34013000100%')  
"GEOID" like ('34013000200%')

enter image description here

| improve this answer | |
  • Yes, the GEOID column is in TEXT format. The IN operator seems to work without the wildcards, i.e. if I specify the full value I'm seeking to filter. Hence, it doesn't work with "GEOID" IN ('34013000100%', '34013000200%') (or with one or more underscores) but works with "GEOID" IN ('340130001001', '340130002001'). A sample data file is here – Catalyx Sep 16 at 21:42
  • @Catalyx right- you don't put the % in an IN statement... or underscores... I really don't understand what you're trying to do - select blockgroups that have a GEOID greater than a certain INTEGER value ie GEOID > 34013000100? – DPSSpatial Sep 16 at 21:54
  • Pardon the confusion. I'm trying to filter a TEXT field by using wildcards. In this case, a full GEOID (in STRING format) of block groups in the referenced database has 12 characters and I know the first 11 characters that I'm looking for (i.e. up to the Census tract level). Since I don't know the last character (block group level), I'm trying to use a wildcard for the filter. I hope this better explans. If not, I can give a specific example based on the linked file. – Catalyx Sep 16 at 22:31
  • @Catalyx Got it- I think - see my updated answer... let me know. – DPSSpatial Sep 16 at 23:24
  • Running the filter seems to work for up to 30 values in the Query Builder's filter expression and after which it gives an error OGR[3] error 1: Too many recursion levels in expression. Do you think there is an easier way than to add the values in multiples of 30? – Catalyx Sep 17 at 15:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.