【发布时间】:2010-10-01 05:48:05
【问题描述】:
mysql中如何选择只包含大写字符的字段或不包含任何小写字符的字段?
【问题讨论】:
-
字段是否允许包含非字母?
标签: 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)
【讨论】:
这对我有用。它找到了所有带有大写字符的用户电子邮件:
SELECT * FROM users WHERE mail REGEXP BINARY '[A-Z]';
【讨论】:
SELECT * FROM table1 WHERE (columnname COLLATE latin1_bin )=UPPER(depart);
【讨论】:
通过使用REGEXP : http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql-select-statements/
使用[:upper:] 表示大写字母。
SELECT * FROM table WHERE field REGEXP '^[[:upper:]+]$'
【讨论】:
SELECT column_name FROM table WHERE column_name REGEXP BINARY '^[A-Z]+$'
【讨论】:
基本eg。
SELECT * FROM foo WHERE bar REGEXP '[A-Z]';
【讨论】:
试试这个 -
SELECT * FROM <mytable> WHERE UPPER(<columnname>) = <columnname>
【讨论】:
在 cmets 中找到了这个 - 它应该有自己的帖子:
SELECT * FROM mytable WHERE BINARY mycolumn = BINARY UPPER(mycolumn);
WHERE UPPER(mycolumn) = mycolumn 的问题在于排序规则,这取决于您的表可以在那里使用什么。
【讨论】: