| From: | T E Schmitz <mailreg(at)numerixtechnology(dot)de> |
|---|---|
| To: | pgsql-sql(at)postgresql(dot)org |
| Subject: | Re: SELECT substring with regex |
| Date: | 2006-07-07 19:23:50 |
| Message-ID: | 44AEB4C6.9000903@numerixtechnology.de |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-sql |
Rodrigo De Leon wrote:
> On 7/7/06, T E Schmitz <mailreg(at)numerixtechnology(dot)de> wrote:
>
>> But that takes me to the next problem:
>>
>> For the sake of the example I simplified the regular pattern.
>> In reality, BASE_NAME might be:
>>
>> 28mm
>> 28-70mm
>>
>> So the reg. expr. requires brackets:
>>
>> substring (NAME, '^(\\d+(-\\d+)?mm)' ) as BASE_NAME
>>
>> Actually, the pattern is more complex than that and I cannot see how I
>> can express it without brackets.
>
>
> Maybe:
>
> select
> substring ('28-70mm LD AD Asp XR Macro', '^[\\d-]*mm' ) as BASE_NAME
Sorry, but that would also capture something like
10-30-59mm
The pattern describes either a single length (120 millimeters) or a
range (30 to 70 millimetres), hence:
\\d+(-\\d+)?mm
The ? quantifier refers to the combination of '-' and digits and has to
be bracketed.
If the brackets cannot be avoided in the expression, your original
suggestion might come in handy though:
SELECT
substring (NAME, '^\\d+(-\\d+)?mm') AS BASE_NAME ,
substr(
NAME
, char_length(
substring (NAME, '^\\d+(-\\d+)?mm')
) + 2
) AS SUFFIX
Still, I'd be interested to know whether there is a 'more elegant' solution.
--
Regards,
Tarlika Elisabeth Schmitz
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Aaron Bono | 2006-07-07 19:42:10 | Fwd: Atomar SQL Statement |
| Previous Message | Oisin Glynn | 2006-07-07 19:18:13 | Help with performance and explain. |