sql - Postgres: order data by part of string -
sql - Postgres: order data by part of string -
i have column name represents person's name in next format:
firstname [middlename] lastname [, sr.|jr.] for, example:
john smith john j. smith john j. smith, sr. how can order items lastname?
a correct , faster version this:
select * tbl order substring(name, '([^[:space:]]+)(?:,|$)') or:
order substring(name, e'([^\\s]+)(?:,|$)') or even:
order substring(name, e'([^\\s]+)(,|$)') explain [^[:space:]]+ .. first (and longest) string consisting of 1 or more non-whitespace characters. (,|$) .. terminated comma or end of string.
the lastly 2 examples utilize escape-string syntax , class-shorthand \s instead of long form [[:space:]] (which loses outer level of brackets when within character class).
we don't have utilize non-capturing parenthesis (?:) after part want extract, because (quoting manual):
.. if pattern contains parentheses, portion of text matched first parenthesized subexpression (the 1 left parenthesis comes first) returned.
testselect substring(name, '([^[:space:]]+)(?:,|$)') (values ('john smith') ,('john j. smith') ,('john j. smith, sr.') ,('foo bar smith, jr.') ) x(name) sql postgresql
Comments
Post a Comment