首页 新闻 会员 周边 捐助

求一个SQL查询语句的解决方案

1
悬赏园豆:20 [已解决问题] 解决于 2014-10-10 15:11

例如:输入“中华”查询

有如下数据:

1.中华人民共和国

2.振兴中华

3.爱我中华

4.中华情

5.为中华之崛起而读书

 

查询出来应该为1或4排前面,因为1和4是以“中华”开头的

 

这就是我们的需求,请问有什么好办法吗?

问题补充:

这个最好是可以转换为hql,我们现在用的是hibernate框架,使用union好像不行

zhengjinfeng的主页 zhengjinfeng | 初学一级 | 园豆:90
提问于:2014-09-28 11:39
< >
分享
最佳答案
0

假如是用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;
收获园豆:14
GisClub | 菜鸟二级 |园豆:330 | 2014-10-08 16:48

hql 同理

GisClub | 园豆:330 (菜鸟二级) | 2014-10-08 16:50

@GisClub: 没错,oracle就用instr(t.name,'中华')来查询,主要是order by,查询条件,直接用 '%中华%'就能满足需求了,谢谢!

zhengjinfeng | 园豆:90 (初学一级) | 2014-10-10 15:09
其他回答(12)
0

SELECT ... WHERE title LIKE '中华%'

UNION

SELECT ... WHERE title LIKE '%中华'

观铃 | 园豆:186 (初学一级) | 2014-09-28 11:45

这个查询语句是不是漏掉第5个了

支持(0) 反对(0) zhengjinfeng | 园豆:90 (初学一级) | 2014-09-28 11:49
0

这样的查询,一般都用模糊查询,也就是使用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

收获园豆:3
519740105 | 园豆:5810 (大侠五级) | 2014-09-28 11:51
0

SELECT ... WHERE title LIKE '中华%'

UNION

SELECT ... WHERE title LIKE '%中华%'  and title not in ( select title from where title like '中华%')

LZ每天进步一点点 | 园豆:217 (菜鸟二级) | 2014-09-28 13:34
0

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

收获园豆:3
米修君 | 园豆:553 (小虾三级) | 2014-09-28 14:16
0

hibernate 框架中 也可以用SQL 语句 有个枚举选项 给出使用hql还是sql进行查询 你再仔细看看 

二线中的嗷嗷者 | 园豆:14 (初学一级) | 2014-09-28 15:08
0
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) 

 

符合需求吧?
释迦苦僧 | 园豆:238 (菜鸟二级) | 2014-09-28 15:35
0

其实是二个问题

一个是如何查询含有”中华“

一个是查出来的数据如何排名。

分开想就容易多了

查询就用like

排名的话得找到其索引

Albert Fei | 园豆:2102 (老鸟四级) | 2014-09-28 16:30
0

模糊查询就不说了,排序的话,看你的样子是找“中华”第一次出现的问题,那么很明显就是charindex函数

幻天芒 | 园豆:37207 (高人七级) | 2014-09-28 23:49
0

关注一下.

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-29 19:35
0

charindex 正解

leerh | 园豆:207 (菜鸟二级) | 2014-09-30 10:06
0

找到该文字在字符串的索引位置,然后在反转数组

唯我独萌 | 园豆:537 (小虾三级) | 2014-10-08 16:56
0

其实这个问题如@Albert Fei 说的一样,不是单纯的是查询的问题,而是查询出来如何排序,我一直用的是Luncene.Net做网站搜索,你还可以用PanGu分词

amityat | 园豆:476 (菜鸟二级) | 2014-10-10 14:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册