mySQL REGEXP to SELECT information_schema.COLUMNS 在 COLUMN_NAME 中使用大写字母

标签 mysql regex

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

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

  • 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 包含大写字母且均未被选中。

为了将来引用和在 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]+' ;

最佳答案

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

查找同时包含大写和小写的混合名称:

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

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

关于mySQL REGEXP to SELECT information_schema.COLUMNS 在 COLUMN_NAME 中使用大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30307911/

相关文章:

mysql 主从两台服务器复制

javascript - 如何从以某个单词结尾的字符串中获取id(正则表达式)

javascript - 两个正则表达式JavaScript小书签之间的区别

mysql中使用正则表达式进行mysql查询

java - 在 Java 中替换单词时保持相同的大小写

javascript - 如何使用 Javascript 从 LINUX 命令字符串中解析标志值

php - 如何快速执行多个mysql查询

java.sql.SQLException : Lock wait timeout exceeded; try restarting transaction exception occur in MYSQL 异常

php - 选择所有选项值 php mysql

mysql - 无法理解这种奇怪的 MySql 客户端行为