SQL能不能够这样like查询?

pzhuyy 2006-07-25 08:11:44
表一:手机归属表
num area
1300000 北京
1300001 北京
1300002 北京
表二:手机信息表
id mobile
1 13000000000
2 13000000001
3 13000010000
4 13000010002
5 13000022000
6 13500000155
能不能从表二查询出手机号码是北京的用户?
多谢各位!
...全文
190 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwh999 2006-07-25
  • 打赏
  • 举报
回复
晕,!原来lz只要查'北京'的?这句也太牵强了些...

SELECT * FROM tb2 WHERE LEFT(mobile,7) IN (SELECT num FROM tb1 WHERE area='北京')
pzhuyy 2006-07-25
  • 打赏
  • 举报
回复
SELECT * FROM tb2 WHERE LEFT(mobile,7) IN (SELECT num FROM tb1 WHERE area='北京')
通过.谢谢大家!
wwh999 2006-07-25
  • 打赏
  • 举报
回复
if exists(select * from sysobjects where name='表1' and xtype='U') drop table 表1
if exists(select * from sysobjects where name='表2' and xtype='U') drop table 表2
GO
--生成测试用数据,为SELECT初始环境
CREATE TABLE 表1(Num int,Area varchar(10))
INSERT INTO 表1 SELECT 1300000,'北京'
UNION ALL SELECT 1300001,'北京'
UNION ALL SELECT 1300002,'北京'

CREATE TABLE 表2(ID int,Mobile bigint)
INSERT INTO 表2 SELECT 1,13000000000
UNION ALL SELECT 2,13000000001
UNION ALL SELECT 3,13000010000
UNION ALL SELECT 4,13000010002
UNION ALL SELECT 5,13000022000
UNION ALL SELECT 6,13500000155


select * from 表1
select * from 表2
GO
--此处为用来查询的SELECT语句
SELECT Mobile,Area
FROM 表1,表2 WHERE Cast(left(mobile,7)as int) % 表1.Num=0
GO
--删除测试散数据
DROP TABLE 表1,表2

/* -- 结果 --
Mobile Area
-------------------- ----------
13000000000 北京
13000000001 北京
13000010000 北京
13000010002 北京
13000022000 北京

(所影响的行数为 5 行)
*/ -- 完成 --
yjdn 2006-07-25
  • 打赏
  • 举报
回复
如果你有归属表,要查手机信息中的手机号的城市,
没有必要用模糊查询,这样效率太低。
yjdn 2006-07-25
  • 打赏
  • 举报
回复
晕,进错版了,改一下
select mobile,area
from 手机信息 a,手机归属 b
where left(a.mobile,7) = b.num
yjdn 2006-07-25
  • 打赏
  • 举报
回复
select mobile,area
from 手机信息 a,手机归属 b
where substr(a.mobile,1,7) = b.num
liangpei2008 2006-07-25
  • 打赏
  • 举报
回复
Declare @t Table(num varchar(12),area varchar(10))
Insert @t Select '1300000','北京'
Union all Select '1300001','北京'
Union all Select '1300002','北京'
-----------------
Declare @t1 Table(Id Int,mobile varchar(20))
Insert @t1 Select 1,'13000000000'
Union all Select 2,'13000000001'
Union all Select 3,'13000010000'
Union all Select 4,'13000010002'
Union all Select 5,'13000022000'
Union all Select 6,'13500000155'

Select *
From @t1 A
Where Exists
( Select 1 From @t where num=left(mobile,7) )
fcuandy 2006-07-25
  • 打赏
  • 举报
回复
如果二表连表查的话

SELECT b.*
FROM tb1 a
INNER JOIN tb2 b
ON CHARINDEX(','+a.num , ','+b.mobile)>0
WHERE area='北京'


SELECT * FROM tb2 WHERE LEFT(mobile,7) IN (SELECT num FROM tb1 WHERE area='北京')

还有其它的不写了
fcuandy 2006-07-25
  • 打赏
  • 举报
回复
WHERE mobile LIKE '130000[0-2]%'
或使用patindex
LouisXIV 2006-07-25
  • 打赏
  • 举报
回复
:-)
wwh999 2006-07-25
  • 打赏
  • 举报
回复
可以...稍等..,这有几种方法,不过如果你的数据量很大的话,很难快得起来哦。

27,582

社区成员

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

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