gpt4 book ai didi

sql - Postgres : order data by part of string

转载 作者:行者123 更新时间:2023-11-29 11:15:43 24 4
gpt4 key购买 nike

我有一个代表人名的列名,格式如下:

firstname [middlename] lastname [, Sr.|Jr.]

例如:

John Smith
John J. Smith
John J. Smith, Sr.

如何按姓氏订购商品?

最佳答案

正确和更快的版本可能如下所示:

SELECT *
FROM tbl
ORDER BY substring(name, '([^[:space:]]+)(?:,|$)')

或者:

ORDER  BY substring(name, E'([^\\s]+)(?:,|$)')

甚至:

ORDER  BY substring(name, E'([^\\s]+)(,|$)')

解释

[^[:space:]]+ .. 由一个或多个非空白字符组成的第一个(也是最长的)字符串。
(,|$) .. 以逗号或字符串结尾结束。

最后两个示例使用转义字符串语法和 class-shorthand \s而不是长格式 [[:space:]](在字符类中时会丢失外层括号)。

我们实际上不必在要提取的部分之后使用非捕获括号 (?:) ,因为 ( quoting the manual ):

.. if the pattern contains any parentheses, the portion of the text that matched the first parenthesized subexpression (the one whose left parenthesis comes first) is returned.

测试

SELECT substring(name, '([^[:space:]]+)(?:,|$)')
FROM (VALUES
('John Smith')
,('John J. Smith')
,('John J. Smith, Sr.')
,('foo bar Smith, Jr.')
) x(name)

关于sql - Postgres : order data by part of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8989098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com