请教高手指点(在线等待ing…,急……)。

bluelift 2011-05-01 09:03:35
从电话号码表(phonetable)中查找共享范围包含在给定字段(A公司B部C科A办公室)中的数据行。

正确的输出结果应该是下表

...全文
209 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
笑是我的药 2011-05-02
  • 打赏
  • 举报
回复
好卡,看不到图
bluelift 2011-05-01
  • 打赏
  • 举报
回复
回复cd731107:

万分感谢!高手,太厉害了!!!
受你启发,我找到问题了!!!!
cd731107 2011-05-01
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
set @sql=N'A公司B部C科A办公室'
select * from phonetable where 共享范围=left(@sql,len(共享范围))
bluelift 2011-05-01
  • 打赏
  • 举报
回复
回复cd731107:

是!
cd731107 2011-05-01
  • 打赏
  • 举报
回复
共享范围这个字段是nvarchar类型的吗?
bluelift 2011-05-01
  • 打赏
  • 举报
回复
要表数据的如下:

insert into phonetable values('1','13912345671','张一','A公司B部C科A办公室','A公司B部C科');--新建语句
insert into phonetable values('2','13912345672','张二','A公司B部C科B办公室','A公司B部C科');--新建语句
insert into phonetable values('3','13912345673','张三','A公司B部A科C办公室','A公司B部A科');--新建语句
insert into phonetable values('4','13912345674','张四','A公司A部C科A办公室','A公司A部C科');--新建语句
insert into phonetable values('5','13912345675','张五','A公司B部C科D办公室','A公司B部C科');--新建语句
insert into phonetable values('6','13912345676','张六','A公司B部G科A办公室','A公司B部');--新建语句
insert into phonetable values('7','13912345677','张七','A公司D部C科E办公室','A公司');--新建语句
bluelift 2011-05-01
  • 打赏
  • 举报
回复
回复claro:

知道用charindex,但语句总是写不对,执行后返回0条记录。
select * from phonetable where charindex(共享范围,'A公司B部C科A办公室')>0

请教……
bluelift 2011-05-01
  • 打赏
  • 举报
回复
回复cd731107:

SQL codedeclare @sql varchar(1000)
set @sql='A公司B部C科A办公室'
select * from phonetable where charindex(共享范围,@sql)>0

我执行后,返回0条记录,?
claro 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bluelift 的回复:]
需要使用charindex进行判断,如果【共享范围】包含在给定的字段(A公司B部C科A办公室)中,就符合条件。
说明:在上面的表中“A公司B部C科A办公室”只是为了向各位高手说明单位名称的组成结构是由大到小的,只是为了说明例子,不能作为主要判断依据。
[/Quote]已经知道,为何问?
bluelift 2011-05-01
  • 打赏
  • 举报
回复
感谢cd731107、claro,祝愿节日快乐!!!
cd731107 2011-05-01
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
set @sql='A公司B部C科A办公室'
select * from phonetable where charindex(共享范围,@sql)>0
bluelift 2011-05-01
  • 打赏
  • 举报
回复
上面的 共享范围=【B部】,打错了。
比如:共享范围=【B部】,给定字段(A公司B部C科A办公室),怎么办?
bluelift 2011-05-01
  • 打赏
  • 举报
回复
回复cd731107:
首先表示感谢!!
最初也考虑过用left实现,但是单位如果是在中间怎么办?
比如:共享范围=【B科】,给定字段(A公司B部C科A办公室),怎么办?

cd731107 2011-05-01
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
set @sql='A公司B部C科A办公室'
select * from phonetable where 共享范围=left(@sql,len(共享范围))
bluelift 2011-05-01
  • 打赏
  • 举报
回复
需要使用charindex进行判断,如果【共享范围】包含在给定的字段(A公司B部C科A办公室)中,就符合条件。
说明:在上面的表中“A公司B部C科A办公室”只是为了向各位高手说明单位名称的组成结构是由大到小的,只是为了说明例子,不能作为主要判断依据。
cd731107 2011-05-01
  • 打赏
  • 举报
回复
--上面的不对
select * from phonetable
where 共享范围=left('A公司B部C科A办公室',len(共享范围))
cd731107 2011-05-01
  • 打赏
  • 举报
回复
select * from phonetable 
where left(共享范围+' ',11)='A公司B部C科A办公室'
cd731107 2011-05-01
  • 打赏
  • 举报
回复
select * from phonetable 
where 共享范围='A公司B部C科A办公室'
or 共享范围='A公司B部C科'
or 共享范围='A公司B部'
or 共享范围='A公司'
claro 2011-05-01
  • 打赏
  • 举报
回复
select *
from phonetable
where substring(共享范围,4,1) in ('B','D') and substring(共享范围,8,1) in ('A','B','D','E')
bluelift 2011-05-01
  • 打赏
  • 举报
回复
回复cd731107:

5 13912345677 张七 A公司D部C科E办公室 A公司
张七的共享范围是“A公司”,表示“A公司”所有人员均可以共享到张七的电话信息。
给定的字段(A公司B部C科A办公室)表明当前用户属于“A公司B部C科A办公室”。
加载更多回复(11)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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