Sql 按字段的部分分组
我在PostgreSQL表中有一个字段name,格式如下: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方言中,
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)
在单独的列中存储名字和姓氏。或者,至少创建一个返回单独列的视图。我不能这样做。这种格式不是我自己设计的。将名字和姓氏分别存储在不同的列中。或者,至少创建一个返回单独列的视图。我不能这样做。这种格式不是我自己设计的。