PostgreSQL中的大写名称的正则表达式检查

时间:2014-10-20 06:39:34

标签: sql regex postgresql count

我有一个数据库,它包含许多名字,类似于以下模式:

名称可以包含许多名字(如双名或三名),由' - '或''分隔。 每个名称由小写或大写字母或大写第一个字母组成,其余为小写。

我想写一个查询来计算所有只有大写字母的名字,或者在两个单词中断后没有大写字母。

示例数据

CREATE TABLE names( name VARCHAR, PRIMARY KEY(name) ); 
INSERT INTO names values('Veronika isabella'); 
INSERT INTO names values('Veronika Isabella'); 
INSERT INTO names values('Michael Karl Otto- Emil'); 
INSERT INTO names values('Michael karl-Otto-emil'); 
INSERT INTO names values('philipp'); 
INSERT INTO names values('Philipp');

1 个答案:

答案 0 :(得分:0)

SELECT count(*) AS misfits
FROM   names
WHERE  name !~ '[[:lower:]]'   -- not a single lower case letter
OR     name ~ '\m[[:lower:]]'  -- lower case letter at beginning of a word
OR     name ~ '[[:lower:]][[:upper:]]'; -- lower case letter after upper case

Details in the manual.

或者initcap()可能符合您的要求(like a_horse commented)。

SELECT count(*) AS misfits
FROM   names
WHERE  name <> initcap(name);

SQL Fiddle.