【发布时间】:2011-11-22 19:36:06
【问题描述】:
我有一个 mysql 查询,例如:
select * from employee
where name like '%ani%'
我希望我的结果以 ani 开头 例如。我的结果应该是: {anil,anirudha,rani, ...} 先以 ani 开头,然后是其他字符。
谁能帮帮我。
【问题讨论】:
标签: mysql string sql-like sql-order-by
我有一个 mysql 查询,例如:
select * from employee
where name like '%ani%'
我希望我的结果以 ani 开头 例如。我的结果应该是: {anil,anirudha,rani, ...} 先以 ani 开头,然后是其他字符。
谁能帮帮我。
【问题讨论】:
标签: mysql string sql-like sql-order-by
类似
select * from employee where name like '%ani%' order by locate('ani', name) asc, name asc
应该做的伎俩...(按子字符串在整个字符串中的位置排序)
【讨论】:
utf8_general_ci 或 utf_unicode_ci),但不会通过定位找到。请参阅我的帖子stackoverflow.com/q/21695687/1211174 EDIT 3 与此相关。任何想法如何克服这个问题?
您可以使用联合来实现此目的:
select * from employee where name like 'ani%' order by name
union
select * from employee where name like '%ani%' and not name like 'ani%' order by name
【讨论】:
zanzibar 并且您有三个包含该单词的字符串:zanzibar、zanzibar tanzania 和 alamo zanzibar 怎么办?您的查询将得到以下结果:alamo zanzibar、zanzibar 和 zanzibar tanzania,这是错误的。
我不完全确定您在寻找什么。如果您只想按名称对该查询的结果进行排序:
select * from employee
where name like '%ani%'
order by name asc;
【讨论】:
select * from employee
where name like '%'+'ani'+'%'
order by if(SUBSTRING(name, 1, length('ani'))= 'ani', 0,1), name
对于 mssql 服务器,将 if 替换为 case when
使用提供的语法,很容易将 'ani' 替换为您想要的任何值
【讨论】: