[求助][SQL SERVER]搜索数据库时,能否将数据库里面的字符串分开搜索

Smellyfish 2016-05-09 05:19:06
请教各位,数据库搜索时能否将数据库中的内容分成几个子字符串来搜索。
背景是这样的,我在匹配数据库的某些内容的时候,需要将数据库中的内容分开匹配。这个在SQL SERVER上有什么样的语句或者什么样的函数可以实现么?
例如:
数据库中某一个数据为“A^B^C-D^E^F" (A/B/C/D/E/F分别代表某个值)
现在我要拿一个字符串去匹配这个数据,匹配的原则如下:
1.可以指定某一段的内容进行匹配,每段之间以破折号为分隔
2.待匹配的值,需要包含数据库中的内容

例如:
1.拿"A^B^C^P"去匹配数据库中的第一段,可以匹配到(带匹配的数据包含数据库中的数据)
2.拿"B^C^P"去匹配数据库中的第一段,匹配不到(数据库中的A没有匹配到)
3.拿"D^E^F"去匹配数据库中的第二段,匹配得到(值完全等于)

现在实现的难点有两个:
1.如何在匹配的时候,能以破折号("-")为单位,指定匹配第几段
2.如何能在匹配的时候能将数据以“^"分割,确定待匹配的数据满足包含要求

P.S:对于待匹配的数据,格式可以是任意的,我可以用一个字符串(A^B^C^D)去匹配,也可以用一个字符串数组去匹配。
只有数据库端的数据格式是固定的

不知道我的要求提清楚了没,求各位大神解答,在线等Orz....

...全文
226 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2016-05-16
  • 打赏
  • 举报
回复
这种匹配比较复杂,一般要先把你的 “A^B^C-D^E^F 进行拆分成更加基础的 字符串,然后再进行匹配。 另外,也可以用全文检索,来查,不过在查之前,也要先对你的 “A^B^C-D^E^F 进行一下处理看,不然估计这些特殊字符- ^ 都会成为干扰符号,导致查询不准确。
LongRui888 2016-05-16
  • 打赏
  • 举报
回复
全文可以参考这个: 【SQL Server学习笔记】全文检索 http://blog.csdn.net/sqlserverdiscovery/article/details/7792955
中国风 2016-05-13
  • 打赏
  • 举报
回复
SeqmentNrs--匹配段数,直接多段同时匹配
中国风 2016-05-13
  • 打赏
  • 举报
回复
数据量小可直接这样用拆分,效率不低



DECLARE @T TABLE(ID INT IDENTITY,Name NVARCHAR(50))
INSERT INTO @T
        ( Name )
VALUES  ( 'AAA^BBB^CCC-DDD^EEE^FFF-GGG^HHH^III'  -- Name - nvarchar(50)
          )
DECLARE @Condition VARCHAR(50)='DDD^EEE^FFF'


;WITH Cte
AS
(
SELECT a.ID,SUBSTRING(a.Name,b.number,CHARINDEX('-',a.Name+'-',b.number+1)-b.number-1) AS Condition,SeqmentNr=ROW_NUMBER()OVER(PARTITION BY a.ID ORDER BY b.number) FROM @T AS a,master.dbo.spt_values AS b WHERE b.type='P' AND b.number>=0 AND CHARINDEX('-','-'+a.Name,b.number)=b.number
)
SELECT a.*,STUFF(b.SeqmentNrs,1,1,'') AS SeqmentNrs FROM @T AS a CROSS APPLY(
SELECT ','+RTRIM(Cte.SeqmentNr) FROM Cte WHERE Cte.Condition LIKE @Condition+'%' OR @Condition LIKE Cte.Condition+'%' FOR XML PATH('')) AS b(SeqmentNrs)
/*
ID	Name	SeqmentNrs
1	AAA^BBB^CCC-DDD^EEE^FFF-GGG^HHH^III	2
*/
中国风 2016-05-13
  • 打赏
  • 举报
回复
这个的功能最好全文检索,数据量大时用中间件 拆分比较可参照 http://blog.csdn.net/roy_88/article/details/1387459
hao1hao2hao3 2016-05-13
  • 打赏
  • 举报
回复
你说的段有规律吗?是不是可以拆分?如果可以,那先拆分到一张临时表,然后再用这个临时表里面的记录去匹配?
Smellyfish 2016-05-13
  • 打赏
  • 举报
回复
可能是我没表达清楚,原来的字符串是一个"-"+"^"的一个组合字段,不是说符号可以随意替换的字段,那这种方法是不是就不太可行了? 原来的字符串就是“AAA^BBB^CCC-DDD^EEE^FFF-GGG^HHH^III"这样的格式。 我现在只匹配第二段的内容”DDD^EEE^FFF",可以吗?
Smellyfish 2016-05-12
  • 打赏
  • 举报
回复
@wmxcn2000 这个语法我下来再查看一下怎么弄 还想请教下,破折号的那个方法有办法弄么?
卖水果的net 版主 2016-05-12
  • 打赏
  • 举报
回复
破折号 换了就可以了 where charindex(^A^B^C^P^ , ^B^) > 0 where charindex(-A-B-C-P- , -B-) > 0
卖水果的net 版主 2016-05-09
  • 打赏
  • 举报
回复

-- 前后各加一个 ^,传来的参数也加
-- 效率看看能不能达到你的要求
where charindex(^A^B^C^P^ , ^B^) > 0

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧