2015-05-18 28 views
1

我正在尝试创建一个查询,它将只在SELECT WHERE条件列中使用小写和大写字母混合的行。我的REGEXP需要什么调整?mySQL REGEXP在COLUMN_NAME中以大写字母选择information_schema.COLUMNS

我从下面的查询期望的结果是:

  • book_of_the_Bible
  • Bible_trivia_category_reference

我需要查询被重复使用其他数据库。我不想与REGEXP匹配“圣经”。

这是我的2次不成功的尝试:

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行。只有2行COLUMN_NAME包含大写字母,并且都没有被选中。

以供将来参考和堆栈溢出的用户的帮助下,正确的查询是:

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

您的正则表达式是一个或多个字符AZ,不允许有下划线... –

回答

1

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

要与上部和下部的情况下找到混合的名字:

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

你的过滤器“^ [AZ] + $”基本过滤掉非英语字符的任何标题(如空间,强调... )

+0

这些更改已成功。 –

1

你介意尝试

选择TABLE_NAMECOLUMN_NAME information_schema.columns在TABLE_SCHEMA =” ((COLUMN_NAME = LOWER(COLUMN_NAME))AND(COLUMN_NAME = UPPER(COLUMN_NAME)))?

+0

该查询选择全部63行 –