SQL字符串查分查询解决方法
SQL字符串查分查询
表结构和数据源如下:
ID Name
1 张三,李四
2 张三1,李四
3 张三10,李四2
4 张三101,李四,王2
5 李四2,王2,张三10
6 李四3,王二2
7 测试,测试111
根据传来的字符串查询, like是不能满足的
1 传来的字符串是单个值:比如 '张三10' name里面按照,分割,如果包含传入的字符串 就查询出来
希望得出的结果是:
ID Name
3 张三10,李四2
5 李四2,王2,张三10
2 传入的字符串格式 可能会是 '张三10,李四', 这种情况 拆分传来的值,和Name里面的值,只要有一个交集 就查询出来
希望得出的结果是:
1 张三,李四
2 张三1,李四
3 张三10,李四2
4 张三101,李四,王2
5 李四2,王2,张三10
------解决方案--------------------
第一个容易,但是第二个要另外处理,不同范畴了这里是第一个
------解决方案--------------------
第1题可否这样:
where name like '张三10,%' or name like '%,张三10' or name like '%,张三10,%'
或者
where ','+name+',' like '%,张三10,%'
------解决方案--------------------
如果数据固定,是可以这样写,否则就痛苦了
表结构和数据源如下:
ID Name
1 张三,李四
2 张三1,李四
3 张三10,李四2
4 张三101,李四,王2
5 李四2,王2,张三10
6 李四3,王二2
7 测试,测试111
根据传来的字符串查询, like是不能满足的
1 传来的字符串是单个值:比如 '张三10' name里面按照,分割,如果包含传入的字符串 就查询出来
希望得出的结果是:
ID Name
3 张三10,李四2
5 李四2,王2,张三10
2 传入的字符串格式 可能会是 '张三10,李四', 这种情况 拆分传来的值,和Name里面的值,只要有一个交集 就查询出来
希望得出的结果是:
1 张三,李四
2 张三1,李四
3 张三10,李四2
4 张三101,李四,王2
5 李四2,王2,张三10
DECLARE @str NVARCHAR(50);
SET @str = '张三10';
--要得到的结果等价下面的语句
SELECT * FROM dbo.Test2 WHERE ID IN ( 3, 5 );
DECLARE @str2 NVARCHAR(50);
SET @str2 = '张三10,李四';
SELECT *FROM dbo.Test2 WHERE ID IN ( 1, 2, 3, 4, 5 );
------解决方案--------------------
第一个容易,但是第二个要另外处理,不同范畴了这里是第一个
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-05-27 07:46:11
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([ID] int,[Name] nvarchar(22))
insert [huang]
select 1,N'张三,李四' union all
select 2,N'张三1,李四' union all
select 3,N'张三10,李四2' union all
select 4,N'张三101,李四,王2' union all
select 5,N'李四2,王2,张三10' union all
select 6,N'李四3,王二2' union all
select 7,N'测试,测试111'
--------------生成数据--------------------------
DECLARE @A NVARCHAR(10)
SET @A=N'张三10'
select *
from [huang]
WHERE CHARINDEX(','+@a+',',','+name+',')>0
----------------结果----------------------------
/*
ID Name
----------- ----------------------
3 张三10,李四2
5 李四2,王2,张三10
*/
------解决方案--------------------
第1题可否这样:
where name like '张三10,%' or name like '%,张三10' or name like '%,张三10,%'
或者
where ','+name+',' like '%,张三10,%'
------解决方案--------------------
如果数据固定,是可以这样写,否则就痛苦了