抱歉,如果这是以前问过的问题,但我找不到答案。如何创建mysql select语句,从数据库中选择第一个字符为小写或大写的所有字符串。
我通常会用这样的方法从英语单词库中随机选择10个长度超过8个字符的单词:
SELECT word FROM en_dictionary WHERE CHAR_LENGTH(word)>8 ORDER BY RAND() LIMIT 10
不幸的是,这也选择了大写字母的单词,我不想在结果中出现,因为它们通常是城市名称、物种等术语:
所以,我的问题是:有没有办法只选择以小写字母(或大写字母)开头的单词?
我可以做这样的事情,它会起作用,但这将是一个非常丑陋的声明:
AND word LIKE BINARY 'a%' AND word LIKE BINARY 'b%' AND word LIKE BINARY 'c%'...
3条答案
按热度按时间w8f9ii691#
可以使用substring和regexp binary
使用regexp binary,您可以根据需要使用任何regex,请参阅文档:https://dev.mysql.com/doc/refman/8.0/en/regexp.html
substring只是用于获取第一个字母。
看到了吗
如何在mysql中检查大写字母?
mysql select query-仅获取值的前10个字符
ghhkc1vu2#
不是一个完整的答案,但方式大的评论,所以我做了一个答案出来。
我建议你使用区分大小写的utf8格式
utf8_bin
.然后你不需要使用二进制或其他mysql“黑客”来得到你需要的结果,你可以简单地使用like/between,区分大小写,没有问题。
创建表
结果
查询#1
查询#2
查询#3
演示
所以你的问题应该是
查询
测试数据演示
编辑日期:2019年11月8日
这将错过像“zahn”这样的词,因为它不是<=“z”,请改用“zzzzz”
多亏了dnoeth的评论和2019年11月7日晚些时候的一个非常晚的辩论会,在某些情况下,上面的sql中确实存在一个bug。。
作为
word BETWEEN 'a' AND 'z'
糖是用来word >= 'a' AND word <= 'z'
这确实不符合当时的情况z
就像zahn
或者zzzzzzzzz
关于那件事。上面查询的有效修补程序是REPEAT('<char>', <number_of_size_of_table_column_datatype>)
在这种情况下,最大范围意味着word BETWEEN 'a' AND REPEAT('z', 255)
补丁的演示。。af7jpaap3#
你可以用
Ascii()
功能。它返回输入字符串最左边字符的数值。对于小写第一个字符:ascii码
a
是97和z
是122。因此,第一个字符的ascii码应该在97和122之间。对于大写第一个字符:ascii码
A
是65岁Z
是90。所以,第一个字符的ascii码应该在65到90之间。