首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql like和between

sql like和between
EN

Stack Overflow用户
提问于 2013-11-22 16:10:47
回答 3查看 1.5K关注 0票数 3

看看这两个查询

代码语言:javascript
复制
SELECT * 
FROM user 
WHERE user_name BETWEEN 'A' AND 'Z' 
ORDER  BY user_name

SELECT * 
FROM user 
WHERE user_name LIKE '[a-z]%'

他们不应该给出同样的答案吗?

第一个返回答案603,第二个不返回任何内容

EN

回答 3

Stack Overflow用户

发布于 2013-11-22 16:28:20

第一条语句get all user_name大于/等于A和lower /等于Z(应用字母排序)

第二个是get all user_name start a-z。

如果您有以下行:

  • Angel
  • Berthold
  • 萨曼莎
  • Vanessa
  • 祖马

第一个查询得到:

  • 萨曼莎
  • Vanessa

第二个得到...nothing

票数 1
EN

Stack Overflow用户

发布于 2013-11-22 16:30:39

不,因为邪恶的我可以输入以空格开头的用户名,也可以输入像Zina这样的用户名

这不在A-Z的范围内(例如,‘Zina’将在A-ZZ的范围内)。

如果使用以下命令,可能会得到(或多或少)相同的结果

代码语言:javascript
复制
WHERE user_name BETWEEN 'A' AND 'ZZZZZZZZZZZZZZZZZZZ' 

此外,它还取决于排序规则的区分大小写。

第二个查询获取所有以a到z开头的用户名,但它们可能包括其他开始字符,因为在这个范围(for real)中可能只有一些花哨的土耳其字符。

你应该更好地使用

代码语言:javascript
复制
WHERE user_name LIKE '[abcdefghijklmnopqrstuvwxyz]%'

这是假设您只有ASCII用户名。

(例如,这不适用于德语äöü)

备注:

您的最后一句话导致我得出结论,您的第二个查询没有返回任何内容。

您没有指明所使用的RDBMS系统类型,但是如果您使用的是PostGreSQL,那么在第二个查询中什么都得不到的原因是postgre区分大小写,并且在您的between查询中使用大写字母。我假设您的用户名以大写字母(Haha ;)开头?

当PostGre和你想要一个不区分大小写的查询时,使用ILIKE:

代码语言:javascript
复制
WHERE user_name ILIKE '[a-z]%'
票数 1
EN

Stack Overflow用户

发布于 2013-11-22 16:33:49

如果您使用的是mysql,那么like范围通配符(a-z)将不起作用。请尝试使用“RLIKE”。-其中RLIKE 'a-z‘

在A到Z之间将进行词法有序匹配,其中=>A和<=Z示例{A,AA,BA,CA,Z,ZA}将检索{A,AA,BA,CA,Z},而不是ZA,但在a-z%中,您将获得包括ZA在内的所有行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20139994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档