Rodrigo De Leon wrote:
On 7/7/06, T E Schmitz <[EMAIL PROTECTED]> 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

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

              http://archives.postgresql.org

Reply via email to