如何仅使用BETWEEN运算符筛选以'z'开头的名称?
如何仅使用BETWEEN运算符筛选以'z'开头的名称?
嘿,这个问题我之前也踩过坑!其实核心原因是数据库对字符串的比较逻辑——当你用BETWEEN 'a' AND 'z'时,只有**刚好等于'z'**的字符串会被包含,而像'Zoe'、'Zack'这类以'z'开头但后面还有字符的内容,都会因为比单纯的'z'大,被排除在范围外。
那怎么用BETWEEN搞定所有以z开头的名称呢?很简单,我们只需要把上界换成一个比所有以z开头的字符串都大的值就行:
方法一:利用ASCII字符顺序
在ASCII编码里,'{'的编码是123,刚好比'z'(122)大一位,所有以'z'开头的字符串都会比'{'小。所以可以写:
SELECT name FROM your_table WHERE name BETWEEN 'a' AND '{'
方法二:拼接超长后缀
如果不想用特殊字符,也可以给'z'拼接一串足够长的相同字符,确保它比任何实际业务中的名称都长,比如:
SELECT name FROM your_table WHERE name BETWEEN 'a' AND 'zzzzzzzz'
只要后缀足够长,就能覆盖所有以z开头的名称(毕竟你不会有名字是十几个z开头的吧😉)。
如果你的数据库区分大小写,记得调整对应的字符——比如要包含大写Z开头的,就把上界换成'['(ASCII 91,比'Z'(90)大),语句改成BETWEEN 'A' AND '['就行。
备注:内容来源于stack exchange,提问作者yash
相关产品推荐
相关产品推荐

