sql查询字符串匹配问题 请教前辈

zjybushiren88888 2013-05-02 06:18:35
数据库已简化 sql查询字符串匹配问题 请教前辈 希望不吝赐教
表A
id name cityId
1 A1 1|2|3|4|5|6|7|8|9|10|11|......
2 A2 2|3|5|6|7|8|9|10|11|12|......
数据若干条


需求:
查询指定cityId的所有数据 比如查询cityId=1 返回A1数据
因该库是朋友那接手 所以结构无法变动 望理解。
...全文
271 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你到底有没有看懂‘|’+@cityid+'|'是什么意思哦!
daiyueqiang2045 2013-05-03
  • 打赏
  • 举报
回复
引用 14 楼 zjybushiren88888 的回复:
[quote=引用 13 楼 daiyueqiang 的回复:] [quote=引用 12 楼 zjybushiren88888 的回复:] 在线等。
我的那个是正确的啊[/quote] id name cityId 1 A1 1|10|...... 2 A2 2|11|...... like 我查cityId=1的 2条数据都会出来吧 因为2的cityId 有11[/quote] 当然不会了,你可以尝试一下,我已经做了完善
zjybushiren88888 2013-05-03
  • 打赏
  • 举报
回复
引用 13 楼 daiyueqiang 的回复:
[quote=引用 12 楼 zjybushiren88888 的回复:] 在线等。
我的那个是正确的啊[/quote] id name cityId 1 A1 1|10|...... 2 A2 2|11|...... like 我查cityId=1的 2条数据都会出来吧 因为2的cityId 有11
daiyueqiang2045 2013-05-03
  • 打赏
  • 举报
回复
引用 12 楼 zjybushiren88888 的回复:
在线等。
我的那个是正确的啊
zjybushiren88888 2013-05-03
  • 打赏
  • 举报
回复
在线等。
bashen1101 2013-05-03
  • 打赏
  • 举报
回复
引用 4 楼 blueriver1981 的回复:
搞错了,是这样 select * from 表A where '|'+cityId+'|' like '%|1|%'
这个是正确答案呀,我就这么搞过 LZ估计用错了吧 like '%|1|%'怎么可能查到11?
q465897859 2013-05-03
  • 打赏
  • 举报
回复
select * from 表A
where charindex('|1|','|'+cityid)>0
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 9 楼 TravyLee 的回复:
select * from tb where charindex('|'+@cityid+'|','|'+cityid+'|')>0
多谢你的回答 你这个如果我cityId 10|11|12 我查询1 也会显示出来
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 8 楼 hm2012 的回复:
CREATE TABLE   #TB
(id INT,
 name VARCHAR(10),
 cityid VARCHAR(1000))
INSERT INTO  #tb
SELECT  1,'A1','1|2|3|4|5|6|7|8|9|10|11|' 
UNION ALL
SELECT  1,'A2','2|3|5|6|7|8|9|10|11|12|'





WITH cte AS (
SELECT id,NAME,cityid=cast(LEFT(cityid,CHARINDEX('|',cityid)-1) AS VARCHAR),
path=cast(STUFF(cityid,1,CHARINDEX('|',cityid),'') AS VARCHAR) FROM #tb
UNION ALL
SELECT id,NAME,cityid=cast(LEFT(path,CHARINDEX('|',path)-1) AS VARCHAR) ,
path=cast(STUFF(path,1,CHARINDEX('|',path),'') AS VARCHAR) FROM cte 
WHERE PATH!='')

SELECT id,NAME,cityid FROM CTE WHERE cityid='1'
多谢你的回答 可是我执行后 错误信息:传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
  • 打赏
  • 举报
回复
select * from tb where charindex('|'+@cityid+'|','|'+cityid+'|')>0
hm2012 2013-05-02
  • 打赏
  • 举报
回复
CREATE TABLE   #TB
(id INT,
 name VARCHAR(10),
 cityid VARCHAR(1000))
INSERT INTO  #tb
SELECT  1,'A1','1|2|3|4|5|6|7|8|9|10|11|' 
UNION ALL
SELECT  1,'A2','2|3|5|6|7|8|9|10|11|12|'





WITH cte AS (
SELECT id,NAME,cityid=cast(LEFT(cityid,CHARINDEX('|',cityid)-1) AS VARCHAR),
path=cast(STUFF(cityid,1,CHARINDEX('|',cityid),'') AS VARCHAR) FROM #tb
UNION ALL
SELECT id,NAME,cityid=cast(LEFT(path,CHARINDEX('|',path)-1) AS VARCHAR) ,
path=cast(STUFF(path,1,CHARINDEX('|',path),'') AS VARCHAR) FROM cte 
WHERE PATH!='')

SELECT id,NAME,cityid FROM CTE WHERE cityid='1'
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
在线等~
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 4 楼 blueriver1981 的回复:
搞错了,是这样 select * from 表A where '|'+cityId+'|' like '%|1|%'
id name cityId 1 A1 1|10|...... 2 A2 2|11|...... like可以吗 我查cityId=1的 2条数据都会出来吧 因为2的cityId 有11
duanzhi1984 2013-05-02
  • 打赏
  • 举报
回复
使用字符串分隔,利用一个函数将cityid进行拆分为 1 A1 1 1 A1 2 1 A1 3 1 A1 4 /...... 再进行查询
blueriver1981 2013-05-02
  • 打赏
  • 举报
回复
搞错了,是这样 select * from 表A where '|'+cityId+'|' like '%|1|%'
blueriver1981 2013-05-02
  • 打赏
  • 举报
回复
select * from 表A where '|'+cityId+'|' = '|1|'
daiyueqiang2045 2013-05-02
  • 打赏
  • 举报
回复
if OBJECT_ID('t') is not null drop table t
create  table t
(
	id int,
	name varchar(20),
	cityid varchar(500)
)
insert into t
select 1,'A1','1|2|3|4|5|6|7|8|9|10|11|' union
select 1,'A2','2|3|5|6|7|8|9|10|11|12|'

select t.name,('|'+t.cityid)
from
t
where 
'|'+t.cityid like '%'+'|'+'1|%'
jack15850798154 2013-05-02
  • 打赏
  • 举报
回复
我不太明白你所要表达的意思!

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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