首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL查询多值字段中的值解决办法

2013-01-07 
SQL查询多值字段中的值一张employee表,字段有emp_no,emp_name,emp_degree,其中emp_degree字段是学位,因为

SQL查询多值字段中的值
一张employee表,字段有emp_no,emp_name,emp_degree,其中emp_degree字段是学位,因为一个员工可能有多个学位,数据库设计时采用了把多个学位的值用逗号分隔存在emp_degree字段中。现在我想问的是如何用sql语句查询出具有a学位的员工。
示例数据:
emp_no   emp_name  emp_degree
1         keven     a,b,c
2          nike     a,b
3          mical     b
这条sql语句如何写呢?
[解决办法]


select * from tb where emp_degree like'%a%'

or

select * from tb where charindex('a',emp_degree)>0

[解决办法]
select * from tb where ',' + emp_degree + ',' like'%,a,%'

or

select * from tb where charindex(',a,',',' + emp_degree + ',')>0



[解决办法]
select * from tb where charindex(','+'a'+',',','+emp_degree+',')>0

[解决办法]
引用:
SQL code
select * from tb where ',' + emp_degree + ',' like'%,a,%'

or

select * from tb where charindex(',a,',',' + emp_degree + ',')>0

+
[解决办法]


declare @t table(emp_no int,emp_name varchar(10),emp_degree varchar(10))
insert into @t select 1,'keven','a,b,c' union all
select 2,'nike','a,b' union all
select 3,'mical','b';

select a.emp_no,a.emp_name,b.v1 from (
select emp_no,emp_name,cast('<root><d>'+REPLACE(emp_degree ,',','</d><d>')+'</d></root>' as xml) as val from @t
) a
outer apply (
select  v1=N.v.value('.','varchar(10)') from a.val.nodes('/root/d') N(v)
) b

/*
emp_no      emp_name   v1
----------- ---------- ----------
1           keven      a
1           keven      b
1           keven      c
2           nike       a
2           nike       b
3           mical      b
*/

[解决办法]
 #8楼 得分:0回复于:2011-09-21 16:55:11SQL code

 select a.emp_no,a.emp_name,b.v1 from (
    select emp_no,emp_name,cast('<root><d>'+REPLACE(emp_degree ,',','</d><d>')+'</d></root>' as xml) as val from @t


) a
outer apply (
    select  v1=N.v.value('.','varchar(10)') from a.val.nodes('/root/d') N(v)
) b


 这个在SQL2000里怎么写

热点排行