假如是用mysql的话 可以用locate函数
SELECT t.id as '编号',t.name as '名称',locate("中华",t.name) as cIndex FROM `test_charindex` as t where locate("中华",t.name)>0 order by cIndex;
hql 同理
@GisClub: 没错,oracle就用instr(t.name,'中华')来查询,主要是order by,查询条件,直接用 '%中华%'就能满足需求了,谢谢!
SELECT ... WHERE title LIKE '中华%'
UNION
SELECT ... WHERE title LIKE '%中华'
这个查询语句是不是漏掉第5个了
这样的查询,一般都用模糊查询,也就是使用like。
按照你的需求,这个查询是不可能用简单的like查询来达成目的的。
你可以用charindex、instr等函数来检索,如:
select b.f1, b.f2, b.f3, ..., b.fn from
(
select a.f1, a.f2, a.f3, ..., a.fn, charindex(a.f1, '中华') as f1Index from table a
where a.f1 is not null and length(a.f1) > length('中华')
) b
where b.f1Index > 0
order by b.f1.Index
SELECT ... WHERE title LIKE '中华%'
UNION
SELECT ... WHERE title LIKE '%中华%' and title not in ( select title from where title like '中华%')
1. select * from
(select *,charindex('中华',dataname) as sortindex from tablename) as tmp
order by tmp.sortindex
2. select * from
(select *,case when charindex('中华',dataname)=1 then 0 else 1 end as sortindex from tablename) as tmp
order by tmp.sortindex
hibernate 框架中 也可以用SQL 语句 有个枚举选项 给出使用hql还是sql进行查询 你再仔细看看
create table #Temp ( Dec varchar(50) ) go insert into #Temp SELECT '中华人民共和国' UNION SELECT '振兴中华' UNION SELECT '爱我中华' UNION SELECT '中华情' UNION SELECT '为中华之崛起而读书' GO SELECT * FROM #Temp GO SELECT * FROM #Temp ORDER BY charindex('中华',Dec) 符合需求吧?
其实是二个问题
一个是如何查询含有”中华“
一个是查出来的数据如何排名。
分开想就容易多了
查询就用like
排名的话得找到其索引
模糊查询就不说了,排序的话,看你的样子是找“中华”第一次出现的问题,那么很明显就是charindex函数
关注一下.
charindex 正解
找到该文字在字符串的索引位置,然后在反转数组