sqlserver 判断两个字符串包含相同字符

kousansky 2020-06-25 10:57:05
要实现的结果如下:
订单表:如下有一条数据
单号 | 订单类型 | xxxx
A0001 | A|B|C|D|E | xxxxx
A0002 | C|D|E | xxxxxx
要求:
给的订单类型中只要有一个字母包含在订单表的订单类型中,就需要检索出来。
比如给的订单类型是‘A|F’,因为A存在于单号是A0001这条数据的订单类型中,所以需要把A0001这条数据检索出来,SQL如何实现这种部分包含以及包含与?

select * from 订单表 where 订单类型 xxx ‘A|F’? sqlserver中的CHARINDEX不好使对于这种要求,分不多,请帮忙谢谢
...全文
798 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kousansky 2020-06-26
  • 打赏
  • 举报
回复
谢谢,我写了个function进行匹配,也搞定了。
唐诗三百首 2020-06-26
  • 打赏
  • 举报
回复

create table 订单表
(单号 varchar(20),
 订单类型 varchar(20),
 xxxx varchar(20))

insert into 订单表(单号,订单类型,xxxx)
 select 'A0001','A|B|C|D|E','xxxxx' union all
 select 'A0002','C|D|E','xxxxxx'


declare @types varchar(50)

select @types='A|F'

select * 
 from 订单表 ord
 where exists(select 1
              from (select S=convert(xml,'<r><n>'+replace(@types,'|','</n><n>')+'</n></r>')) t
              cross apply S.nodes('/r/n') x(o)
              where '|'+ord.订单类型+'|' like '%|'+o.value('.','varchar(50)')+'|%')
 
/*
单号                   订单类型                 xxxx
-------------------- -------------------- --------------------
A0001                A|B|C|D|E            xxxxx

(1 行受影响)
*/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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