回答

收藏

如何使sql搜索查询更强大?

技术问答 技术问答 325 人阅读 | 0 人回复 | 2023-09-14

我编写了此sql查询以在表中进行搜索:1 x; w9 v% \. @6 D$ b, K: {3 R3 v0 o) d
SELECT * FROM TableName WHERE Name LIKE '%spa%'
- Y7 h+ W+ \0 e* Z该表包含以下行,例如:
; H! a: i  e! W4 o: ^[ol]太空公司。* B2 t0 B: w) v7 D6 z7 d5 \
温泉度假胜地。
( D7 ]" o* Z1 v& q$ a温泉酒店。 8 @% T( e) p6 d8 [
备件。 3 G0 |, G" m* p( y* R9 [& e; B3 ^
没有主题关键字。
) _. F7 K: _8 D8 ^- k[/ol]. C4 A7 i' G8 S; _9 `( e
我想知道如何编辑此查询,以便它返回如下排序的结果:
. _& ]2 C2 G: q, L4 j0 B' [8 k% e6 R& {' q* m1 e# h2 U
2温泉度假村, T# `/ K4 \) p, m- M( \+ |
3号温泉酒店" n6 k9 Q; I5 q$ w* t& F" D
1太空公司& C4 O: l- o) E) l% J7 u4 ~- y; M
4备件
! }% p0 P, K0 h% h% [; a1 L* Q. [

9 d9 }/ {( H5 V  C表示首先包含确切单词的项目,然后包含类似词语的项目。3 o' [7 N4 h( w& @/ z5 }2 G
               
, H' @, F7 g% M( p9 x7 H解决方案:
+ h  w2 W3 D6 W               
5 m& [4 T) N, F0 P( [! G6 j/ C& B; o

4 b. c; p. N$ B1 ?7 W                就像是9 |4 z; O: e; Z+ n
Select * from TableName where Name Like 'Spa%'+ A# g- n- C; w; R1 N
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end
5 \4 J3 d; b* K0 T应该可以。" `% e4 T( I/ k$ m& i
实际上这会更好
: s* G4 z. m$ T- GSelect * from TableName where Name Like 'Spa%'
9 X. Z. o; J7 @  e0 JORDER BY DIFFERENCE(name, 'Spa') desc;9 u7 z4 `5 z/ R! a
FWIW我做了一些快速测试,如果“名称”在NONCLUSTERED: o4 T  ~8 H: O  k! x* g0 ?4 A5 r
INDEX中,则SQL将使用索引,并且不进行表扫描。同样,LIKE似乎比charindex使用更少的资源(charindex返回的期望结果更少)。在sql# K3 C0 D  @2 a1 X& a
2000上进行了测试。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则