计算字符串中大写字母的数量



我遇到了一个看似简单的问题,我无法解决。我想确定大写字母的数量是否大于小写字母的数量(忽略特殊字符、空格等(。

id | text        | upper_greater_lower | note
------------------------------------------------------------------
1  | Hello World | False               | because |HW| < |elloorld|
2  | The XYZ     | True                | because |TXYZ| > |he|
3  | Foo!!!      | False               | because |F| < |oo|
4  | BAr???      | True                | because |BA| > |r|

我最初的想法是确定低写字母的数量,然后是大写字母,最后比较它们。但是,我无法以任何优雅和有效的方式做到这一点。

我希望处理 ~30M 行,每行 ~300 个字符。

你有什么建议?

谢谢!

使用正则表达式魔法,这可能是:

SELECT length(regexp_replace(textcol, '[^[:upper:]]', '', 'g'))
> length(regexp_replace(textcol, '[^[:lower:]]', '', 'g'))
FROM atable;

最新更新