我有以下内容:
create table words (value varchar(10));
insert into words values('bbbbb');
insert into words values('ccccc');
如果现在我查询select * from words where value > 'b%';
我得到:
+-------+
| value |
+-------+
| bbbbb |
| ccccc |
+-------+
问题是:如何让value
列值大于b
的所有元组?
我的意思是我想让所有元组的value
列的值按照字母顺序从c到z开始。
答案 0 :(得分:2)
尝试
WHERE value REGEXP '^[c-z]'
答案 1 :(得分:2)
这将是一个有效的解决方案(可能比正则表达式更有效):
WHERE left(value,1) > 'b' AND left(value,1) <= 'z'
请注意,这只会处理小写字母,它可能无法使用大写字母,对于它们,您可能需要添加更多条件
答案 2 :(得分:1)
>
运算符比较lexicographical order中的字符串,请参阅以下示例:
mysql> SELECT 'a' > 'b', 'b' > 'a', 'ab' > 'aaa', 'ab' > 'b';
+-----------+-----------+--------------+------------+
| 'a' > 'b' | 'b' > 'a' | 'ab' > 'aaa' | 'ab' > 'b' |
+-----------+-----------+--------------+------------+
| 0 | 1 | 1 | 0 |
+-----------+-----------+--------------+------------+
1 row in set (0.00 sec)
如果您正在寻找模式匹配,则应使用like或正则表达式。检查示例:
12.5.1 String Comparison Functions
mysql> SELECT 'bbbbb' like 'b%', 'cccc' like 'b%';
+-------------------+------------------+
| 'bbbbb' like 'b%' | 'cccc' like 'b%' |
+-------------------+------------------+
| 1 | 0 |
+-------------------+------------------+
1 row in set (0.00 sec)
mysql> SELECT 'bbbb' REGEXP 'b.*', 'cccc' REGEXP 'b.*';
+---------------------+---------------------+
| 'bbbb' REGEXP 'b.*' | 'cccc' REGEXP 'b.*' |
+---------------------+---------------------+
| 1 | 0 |
+---------------------+---------------------+
1 row in set (0.00 sec)