如何确定postgresql中的字符是大写还是小写?

Pup*_*nij 10 postgresql lowercase uppercase

我并没有发现任何类似的功能isupperislowerPostgreSQL中.我真正需要的是从表中选择所有记录,其中一列包含capitized(但不是大写)单词.也就是说,每个单词的第一个符号是大写,第二个是小写.单词可以用任何语言书写.

Bob*_*obG 23

如果仅选择列中第一个字母大小写不等于列中第一个字母的小写版本的行呢?

就像是:

SELECT * FROM table 
    WHERE SUBSTRING(col FROM 1 FOR 1) != LOWER(SUBSTRING(col FROM 1 FOR 1))
Run Code Online (Sandbox Code Playgroud)

理论上,上面的内容也应该考虑数据库字符集/语言环境.


dbe*_*hur 11

您可以使用Postgres regexp来测试您的特定条件:

select * from sample 
where col ~ E'^[[:upper:]][^[:upper:]]'
Run Code Online (Sandbox Code Playgroud)

E'^[[:upper:]][[:lower:]]'如果第二个字符必须是小写字母而不是任何非大写字母,则可以使用.


Kem*_*hou 5

如果你想知道一个字符串是否至少包含一个小写字符,那么你可以使用 upper 函数 [upper(mystr)=mystr]:

dbname=> select upper('AAbbCC')='AAbbCC';
 ?column? 
----------
 f
(1 row)

dbname=> select upper('AABBCC')='AABBCC';
 ?column? 
----------
 t
(1 row)
Run Code Online (Sandbox Code Playgroud)

您可以使用相同的逻辑通过 lower() sql 函数检查字符串是否至少包含一个大写字符。

对于更复杂的模式,您将需要使用早期答案所建议的正则表达式或子字符串。