mysql - 选择仅包含大写字母的所有字段

标签 mysql

如何在mysql中选择只包含大写字符的字段或不包含任何小写字符的字段?

最佳答案

您可能希望使用区分大小写的 collation .我相信默认是不区分大小写的。示例:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_cs;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');

然后:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)

如果你不想对整个表使用区分大小写的排序规则,你也可以使用 COLLATE子句为 @kchau suggested in the other answer .

让我们尝试使用不区分大小写的排序规则的表:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_ci;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');

这不会很好地工作:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | SomeThing |
|    2 | something |
|    3 | SOMETHING |
+------+-----------+
3 rows in set (0.00 sec)

但是我们可以使用 COLLATE 子句将名称字段整理为区分大小写的整理:

SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+$';
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)

关于mysql - 选择仅包含大写字母的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3836825/

相关文章:

c# - 无法将 MySQL 日期/时间值转换为 System.DateTime

PHP/MySQL : Simple timekeeping and update scheme?

python - 如何在 django 中使用 sql 查询选择两个日期之间的数据?

php - 带有单词列表和链接的 MYSQL 和 PHP 搜索脚本

ios - 如何用swift连接mysql?

php - csv 未使用 laravel 上传到数据库

mysql - 如何将列合并为一行

php - PDO 更新查询中的跟踪错误

php - 防止重复插入数据库

mysql - 导入 CSV 以更新表中的行