22,210
社区成员
发帖
与我相关
我的任务
分享
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([code] nvarchar(22),[name] nvarchar(26))
Insert #T
select N'01',N'张三李四' union all
select N'02',N'张三李四王五' union all
select N'03',N'张李四王五' union all
select N'04',N'张三王五' union all
select N'05',N'李四王五赵六'
GO
--生成辅助表TNum
SELECT TOP 1000 Num=IDENTITY(INT,1,1) INTO TNum FROM syscolumns AS a,syscolumns AS b
go
DECLARE @Where NVARCHAR(100)='李张'
SELECT * from #T AS a WHERE NOT EXISTS(SELECT 1 FROM TNum AS b WHERE LEN(@Where)>=b.Num AND NOT EXISTS(SELECT 1 FROM #T WHERE [code]=a.[code] AND [name] LIKE '%'+SUBSTRING(@Where,b.Num,1)+'%'))
/*
code name
01 张三李四
02 张三李四王五
03 张李四王五
*/
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([code] nvarchar(22),[name] nvarchar(26))
Insert #T
select N'01',N'张三李四' union all
select N'02',N'张三李四王五' union all
select N'03',N'张李四王五' union all
select N'04',N'张三王五' union all
select N'05',N'李四王五赵六'
GO
DECLARE @Where NVARCHAR(100)='张李'
DECLARE @i INT=LEN(@Where)
WHILE @i>0
SELECT @Where=STUFF(@Where,@i,0,'%'),@i=@i-1
Select * from #T WHERE PATINDEX(@Where+'%',[name])>0
/*
code name
01 张三李四
02 张三李四王五
03 张李四王五
*/
DECLARE @search NVARCHAR(1000)=N'张李'
;with tb(code,NAME) AS (
SELECT '01',N'张三李四' UNION ALL
SELECT '02',N'张三李四王五' UNION ALL
SELECT '03',N'张李四王五' UNION ALL
SELECT '03',N'李四张王五' UNION ALL
SELECT '04',N'张三王五'
)
SELECT * FROM tb
CROSS APPLY (
SELECT SUM(s) s FROM (
SELECT CASE WHEN CHARINDEX(SUBSTRING(@search,sv.number,1),tb.NAME)=0 THEN 1 ELSE 0 END AS s
FROM master.dbo.spt_values AS sv where sv.type='P' AND sv.number BETWEEN 1 AND LEN(@search)
) o
) t
WHERE t.s=0
with tb(code,NAME) AS (
SELECT '01','张三李四' UNION ALL
SELECT '02','张三李四王五' UNION ALL
SELECT'03','张李四王五' UNION ALL
SELECT'04', '张三王五')
SELECT * FROM TB WHERE NAME LIKE'%张%' and NAME LIKE'%李%'