Re: Pattern Matching - Range of Letters

Поиск
Список
Период
Сортировка
От Ron St-Pierre
Тема Re: Pattern Matching - Range of Letters
Дата
Msg-id 4643A6FD.6090909@shaw.ca
обсуждение исходный текст
Ответ на Re: Pattern Matching - Range of Letters  (William Garrison <postgres@mobydisk.com>)
Список pgsql-general
William Garrison wrote:
> That won't work if you have a value "Anz" in there.  It would be in
> the gap between An and Am.
Yes, I realized that too. My solution to it is a bit of a hack, but it's
easy and it works for me in this case. I translate everything to
uppercase and simply append 'ZZZZZZ' to the end of the second string.
None of the strings I am comparing to are longer than 6 characters, and
there are no numerical values in them.

Ron

>
> create table test (test text);
> insert into test values ('A');
> insert into test values ('b');
> insert into test values ('c');
> insert into test values ('d');
> insert into test values ('e');
> insert into test values ('Ab');
> insert into test values ('Ac');
> insert into test values ('Amz');
> insert into test values ('Az');
>
> select * from test where test between 'A' and 'Am';
> "A"
> "Ab"
> "Ac"
>
> select * from test where test between 'An' and 'Bc';
> "Az"
>
> I wouldn't use between in this case.  I'd suggest this:
> select * from test where test >= 'A' and test <'Am';
> "A"
> "Ab"
> "Ac"
>
> select * from test where test >= 'Am' and test <'Bc';
> "Amz"
> "Az"
>
> The end will be tricky because ""zzzz is not < "zz" so you will need
> the last select to be
>
> select * from test where test >= 'Yi';
>
> The beginning will be tricky too if you allow things that come before
> A such as 0-9 or spaces.
>
> Richard Broersma Jr wrote:
>> --- Ron St-Pierre <ron.pgsql@shaw.ca> wrote:
>>
>>> I'm sure that others have solved this but I can't find anything with
>>> my (google and archive) searches. I need to retrieve data where the
>>> text field is within a certain range e.g.
>>> A-An
>>> Am-Bc
>>> Bc-Eg
>>> ....
>>> Yi-Zz
>>>
>>> Does anyone know of a good approach to achieve this? Should I be
>>> looking into regular expressions, or maybe converting them to their
>>> ascii value first?
>>
>> Regular expressions would work, but a between statement should work
>> also.
>>
>> SELECT *
>>   FROM Your_table AS YT
>>  WHERE YT.text_field BETWEEN 'Aa' AND 'An';
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 2: Don't 'kill -9' the postmaster
>>
>
>


В списке pgsql-general по дате отправления:

Предыдущее
От: garry saddington
Дата:
Сообщение: xml to db converter
Следующее
От: Ottavio Campana
Дата:
Сообщение: Re: tokenize string for tsearch?