我有一个数据库,它包含许多名字,类似于以下模式:
名称可以包含许多名字(如双名或三名),由' - '或''分隔。 每个名称由小写或大写字母或大写第一个字母组成,其余为小写。
我想写一个查询来计算所有只有大写字母的名字,或者在两个单词中断后没有大写字母。
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');
答案 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
或者initcap()
可能符合您的要求(like a_horse commented)。
SELECT count(*) AS misfits
FROM names
WHERE name <> initcap(name);