Thread: SELECT from a list
Hello I am wondering if it is possible to use a SINGLE LIKE statement for a selection from a list. For example: If I want to return all results that a phrase starts with a number, can I make a call similar to the following: SELECT * FROM table WHERE phrase LIKE {'0%','1%','2%','3%','4%','5%','6%','7%','8%','9%'}; If not is there an easier way than having to call this: SELECT * FROM table WHERE phrase LIKE '0%' OR phrase LIKE '1%' OR phrase LIKE '2%' OR phrase LIKE '3%' OR phrase LIKE '4%' OR phrase LIKE '5%' OR phrase LIKE '6%' OR phrase LIKE '7%' OR phrase LIKE '8%' OR phrase LIKE '9%'; Thank you. Keith
В Вск, 25.07.2004, в 15:18, Keith Gallant пишет: > Hello > > I am wondering if it is possible to use a SINGLE LIKE statement for a > selection from a list. > > For example: If I want to return all results that a phrase starts with a > number, can I make a call similar to the following: > > SELECT * FROM table WHERE phrase LIKE > {'0%','1%','2%','3%','4%','5%','6%','7%','8%','9%'}; > > If not is there an easier way than having to call this: > > SELECT * FROM table WHERE phrase LIKE '0%' OR phrase LIKE '1%' OR phrase > LIKE '2%' OR phrase LIKE '3%' OR phrase LIKE '4%' OR phrase LIKE '5%' OR > phrase LIKE '6%' OR phrase LIKE '7%' OR phrase LIKE '8%' OR phrase LIKE > '9%'; WHERE SUBSTRING(phrase FROM 1 FOR 1) IN ('0', '1', ....) -- Markus Bertheau <twanger@bluetwanger.de>
Markus Bertheau wrote: > В Вск, 25.07.2004, в 15:18, Keith Gallant пишет: > >>Hello >> >>I am wondering if it is possible to use a SINGLE LIKE statement for a >>selection from a list. >> >>For example: If I want to return all results that a phrase starts with a >>number, can I make a call similar to the following: >> >>SELECT * FROM table WHERE phrase LIKE >>{'0%','1%','2%','3%','4%','5%','6%','7%','8%','9%'}; >> >>If not is there an easier way than having to call this: >> >>SELECT * FROM table WHERE phrase LIKE '0%' OR phrase LIKE '1%' OR phrase >>LIKE '2%' OR phrase LIKE '3%' OR phrase LIKE '4%' OR phrase LIKE '5%' OR >>phrase LIKE '6%' OR phrase LIKE '7%' OR phrase LIKE '8%' OR phrase LIKE >>'9%'; > > > WHERE SUBSTRING(phrase FROM 1 FOR 1) IN ('0', '1', ....) Better yet: SELECT * FROM table WHERE phrase ~ '^[0-9]'; >
В Вск, 25.07.2004, в 16:40, Jean-Luc Lachance пишет: > Better yet: > > SELECT * FROM table WHERE phrase ~ '^[0-9]'; Not so sure if that's better - the regex engines aren't the fastest. -- Markus Bertheau <twanger@bluetwanger.de>
Markus Bertheau <twanger@bluetwanger.de> writes: > В Вск, 25.07.2004, в 16:40, Jean-Luc Lachance пишет: >> Better yet: >> >> SELECT * FROM table WHERE phrase ~ '^[0-9]'; > Not so sure if that's better - the regex engines aren't the fastest. [ raised eyebrow... ] I was under the impression that we had a pretty good one as of PG 7.4. Have you tested it lately? It is true that the above won't be indexable whereas the more tedious OR form potentially could use an index. This is not the fault of the regex engine however, but of limited understanding of regexes in the planner. regards, tom lane
В Вск, 25.07.2004, в 19:34, Tom Lane пишет: > Markus Bertheau <twanger@bluetwanger.de> writes: > > В Вск, 25.07.2004, в 16:40, Jean-Luc Lachance пишет: > >> Better yet: > >> > >> SELECT * FROM table WHERE phrase ~ '^[0-9]'; > > > Not so sure if that's better - the regex engines aren't the fastest. > > [ raised eyebrow... ] I was under the impression that we had a pretty > good one as of PG 7.4. Have you tested it lately? I wasn't trying to say that pg's regex engine was particularly slow, but that regex engines in general are slower than an exact substring search. If I'm mistaken here, please tell. pg's regex engine does have one shortcoming though: it doesn't know UTF-8. -- Markus Bertheau <twanger@bluetwanger.de>
Markus Bertheau <twanger@bluetwanger.de> writes: > pg's regex engine does have one > shortcoming though: it doesn't know UTF-8. Sure it does. We borrowed it from Tcl, remember? The "character class" stuff is not locale-aware at the moment, which is something that ought to get fixed eventually, but claiming it doesn't handle UTF8 at all is simply wrong. regards, tom lane
В Вск, 25.07.2004, в 21:41, Tom Lane пишет: > Markus Bertheau <twanger@bluetwanger.de> writes: > > pg's regex engine does have one > > shortcoming though: it doesn't know UTF-8. > > Sure it does. We borrowed it from Tcl, remember? > > The "character class" stuff is not locale-aware at the moment, > which is something that ought to get fixed eventually, but claiming > it doesn't handle UTF8 at all is simply wrong. Turns out I tested in a SQL_ASCII database. Sorry :) -- Markus Bertheau <twanger@bluetwanger.de>