【发布时间】:2011-05-29 13:22:07
【问题描述】:
在 MySQL 上,我有一个包含以数字开头的数据的列的表
如何选择仅以数字开头的行?
【问题讨论】:
-
与此线程关于如何Detect if value is number in MySQL 的一般情绪相同,但仅限于第一个字符
在 MySQL 上,我有一个包含以数字开头的数据的列的表
如何选择仅以数字开头的行?
【问题讨论】:
SELECT * FROM YourTable WHERE YourColumn regexp '^[0-9]+'
【讨论】:
REGEXP(我不认为 LIKE 支持 RegEx(正如 @RedFilter 所暗示的那样)。不过,我自己可能会使用'^[0-9]+' 作为模式。
'^[0-9].+'?
你可以这样做:
SELECT *
FROM MyTable
WHERE MyColumn REGEXP '^[0-9]';
使用的正则表达式是^[0-9]。
^ - Start anchor, used to ensure the pattern matches start of the string.
[ - Start of character class.
0-9 - Any digit
] - End of character class
实际上,我们正在尝试选择列中以数字开头的那些值。
演示:
mysql> select * from tab;
+-------+
| col |
+-------+
| 1foo |
| foo |
| 10foo |
| foo10 |
+-------+
4 rows in set (0.00 sec)
mysql> select * from tab where col regexp '^[0-9]';
+-------+
| col |
+-------+
| 1foo |
| 10foo |
+-------+
2 rows in set (0.00 sec)
【讨论】:
还有
SELECT * FROM YourTable
WHERE YourColumn LIKE '[0-9]%';
【讨论】:
SELECT * FROM `artists` WHERE `artist` LIKE '[0-9]%' 返回空值。
like 不支持这种模式。为此,您必须使用regexp。例如:SELECT * FROM foo WHERE bar REGEXP '^[0-9]'。 dev.mysql.com/doc/refman/5.7/en/pattern-matching.html
另一种方式:
WHERE LEFT(columnName,1) IN ('0','1','2','3','4','5','6','7','8','9')
并且使用常见的字符集和排序规则,这将起作用并在列上使用索引:
WHERE columnName >= '0' AND columnName < ':'
【讨论】:
SELECT * FROM TABLE T
WHERE T.COLUMNNAME REGEXP '^[0-9]';
另一个答案是:
SELECT * FROM TABLE T
WHERE T.COLUMNNAME RLIKE '^[0-9]';
【讨论】:
RLIKE is a synonym for REGEXP"