Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按字段的部分分组_Sql_Regex_String_Postgresql_Split - Fatal编程技术网

Sql 按字段的部分分组

Sql 按字段的部分分组,sql,regex,string,postgresql,split,Sql,Regex,String,Postgresql,Split,我在PostgreSQL表中有一个字段name,格式如下: JOHN^DOE BILLY^SMITH FIRL^GREGOIRE NOEL^JOHN 等等。格式为LASTNAME^FIRSTNAME。该表包含ID、姓名、生日和性别字段。 如何仅使用名为GROUP的SQL语句?我尝试过几种方法,我想regexp_match可能是一种方法,但我不知道如何为这个任务编写正确的正则表达式。你能帮我吗?我建议分体式: : 我建议分两部分: : 使用。请注意,“^”需要转义,因为在许多regexp方言中,

我在PostgreSQL表中有一个字段name,格式如下:

JOHN^DOE
BILLY^SMITH
FIRL^GREGOIRE
NOEL^JOHN
等等。格式为LASTNAME^FIRSTNAME。该表包含ID、姓名、生日和性别字段。 如何仅使用名为GROUP的SQL语句?我尝试过几种方法,我想regexp_match可能是一种方法,但我不知道如何为这个任务编写正确的正则表达式。你能帮我吗?

我建议分体式:

:

我建议分两部分:

:

使用。请注意,“^”需要转义,因为在许多regexp方言中,它表示行或字符串的开头。使用另一个名称扩展示例,并在第一个字段中使用group by:

印刷品:

 count | regexp_replace 
-------+----------------
     1 | BILLY
     2 | JOHN
     1 | NOEL
     1 | FIRL
(4 rows)
 count | regexp_replace 
-------+----------------
     1 | JOHN
     1 | GREGOIRE
     1 | DOE
     2 | SMITH
(4 rows)
要在第二个字段上按分组,请使用类似的正则表达式:

select
    count(*)
    , regexp_replace(tmp_col, '.*\^', '')
from
    (values
        ('JOHN^DOE')
        , ('BILLY^SMITH')
        , ('FIRL^GREGOIRE')
        , ('NOEL^JOHN')
        , ('JOHN^SMITH')
        )
    as tmp_table(tmp_col)
group by regexp_replace(tmp_col, '.*\^', '')
    ;
印刷品:

 count | regexp_replace 
-------+----------------
     1 | BILLY
     2 | JOHN
     1 | NOEL
     1 | FIRL
(4 rows)
 count | regexp_replace 
-------+----------------
     1 | JOHN
     1 | GREGOIRE
     1 | DOE
     2 | SMITH
(4 rows)
使用。请注意,“^”需要转义,因为在许多regexp方言中,它表示行或字符串的开头。使用另一个名称扩展示例,并在第一个字段中使用group by:

印刷品:

 count | regexp_replace 
-------+----------------
     1 | BILLY
     2 | JOHN
     1 | NOEL
     1 | FIRL
(4 rows)
 count | regexp_replace 
-------+----------------
     1 | JOHN
     1 | GREGOIRE
     1 | DOE
     2 | SMITH
(4 rows)
要在第二个字段上按分组,请使用类似的正则表达式:

select
    count(*)
    , regexp_replace(tmp_col, '.*\^', '')
from
    (values
        ('JOHN^DOE')
        , ('BILLY^SMITH')
        , ('FIRL^GREGOIRE')
        , ('NOEL^JOHN')
        , ('JOHN^SMITH')
        )
    as tmp_table(tmp_col)
group by regexp_replace(tmp_col, '.*\^', '')
    ;
印刷品:

 count | regexp_replace 
-------+----------------
     1 | BILLY
     2 | JOHN
     1 | NOEL
     1 | FIRL
(4 rows)
 count | regexp_replace 
-------+----------------
     1 | JOHN
     1 | GREGOIRE
     1 | DOE
     2 | SMITH
(4 rows)

在单独的列中存储名字和姓氏。或者,至少创建一个返回单独列的视图。我不能这样做。这种格式不是我自己设计的。将名字和姓氏分别存储在不同的列中。或者,至少创建一个返回单独列的视图。我不能这样做。这种格式不是我自己设计的。