mySQL REGEXP在COLUMN_NAME

时间:2015-05-18 16:01:28

标签: mysql regex

我正在尝试创建一个查询,该查询将仅指定在指定的WHERE条件列中混合使用小写和大写字母的行。我的REGEXP需要什么调整?

我期望从以下查询得到的结果是:

  • book_of_the_Bible
  • Bible_trivia_category_reference

我需要将查询重用于其他数据库。我不想匹配"圣经"与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]+' ;

2 个答案:

答案 0 :(得分:1)

你会介意尝试

吗?

SELECT TABLE_NAMECOLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA =" elve1522_elversiculodeldia" AND((COLUMN_NAME = LOWER(COLUMN_NAME))AND(COLUMN_NAME = UPPER(COLUMN_NAME)))?

答案 1 :(得分:1)

要通过大写和小写来标识您的值,您需要使用collat​​e utf8_bin而不是utf8-general_ci,它不关心大小写。

要查找包含大写和小写的混合物名称:

WHERE (CNAME COLLATE utf8_bin) REGEXP '[A-Z]+[a-z]+' 

你的过滤器“^ [A-Z] + $'基本上过滤掉了所有带有非英文字符的标题(如空格,下划线......)。