我正在尝试创建一个查询,该查询将仅指定在指定的WHERE条件列中混合使用小写和大写字母的行。我的REGEXP需要什么调整?
我期望从以下查询得到的结果是:
我需要将查询重用于其他数据库。我不想匹配"圣经"与REGEXP。
这是我的两次失败尝试:
SELECT `TABLE_NAME` , `COLUMN_NAME` FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="elve1522_elversiculodeldia" AND `COLUMN_NAME` != LOWER(`COLUMN_NAME`)
没有结果
SELECT `TABLE_NAME` , `COLUMN_NAME` FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="elve1522_elversiculodeldia" AND (`COLUMN_NAME` COLLATE utf8_general_ci) REGEXP '^[A-Z]+$';
结果只有小写列名。它选择了32/63行。 COLUMN_NAME只有2行包含大写字母,但未选中。
供将来参考,在Stack Overflow用户的帮助下,正确的查询是:
SELECT `TABLE_NAME` , `COLUMN_NAME` FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="elve1522_elversiculodeldia" AND (`COLUMN_NAME` COLLATE utf8_bin) REGEXP '[A-Z]+[a-z]+' ;
答案 0 :(得分:1)
SELECT TABLE_NAME
,COLUMN_NAME
FROM information_schema.COLUMNS WHERE TABLE_SCHEMA =" elve1522_elversiculodeldia" AND((COLUMN_NAME
= LOWER(COLUMN_NAME
))AND(COLUMN_NAME
= UPPER(COLUMN_NAME
)))?
答案 1 :(得分:1)
要通过大写和小写来标识您的值,您需要使用collate utf8_bin而不是utf8-general_ci,它不关心大小写。
要查找包含大写和小写的混合物名称:
WHERE (CNAME COLLATE utf8_bin) REGEXP '[A-Z]+[a-z]+'
你的过滤器“^ [A-Z] + $'基本上过滤掉了所有带有非英文字符的标题(如空格,下划线......)。