求教,以逗号分隔的数据如何查询?

wpl980 2016-01-11 11:15:00
例如:
ID MONTHS
1 01,02,04
2 04,05,06


请问,如何查询月份包含01或04的数据,谢谢!
...全文
321 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-01-12
  • 打赏
  • 举报
回复
引用 6 楼 ch21st 的回复:
用like和CharIndex都可以,但是如果每个元素需要完整匹配,要考虑元素部分包含其他元素的情况如 1,111,1111 此时如果用like "%11%“或者charindex('11', MONTHS)>0回返回上面的记录,但实际不应该返回 不过你这里的值范围仅是1-12问题还不大 我一般的处理方式是charindex(',11,', ','+MONTHS+',')>0(考虑分隔符)
不建议这样处理,这样会用不到索引,性能上有影响,最好用拆结果集的方式
hgwyl 2016-01-12
  • 打赏
  • 举报
回复
1、程序端判断逗号的长度及内容,数组分割; 2、mssql似乎没有直接进行数组分割的函数,但是可以自定义其他函数以实现。搜索一下。
道素 2016-01-11
  • 打赏
  • 举报
回复
用like和CharIndex都可以,但是如果每个元素需要完整匹配,要考虑元素部分包含其他元素的情况如 1,111,1111 此时如果用like "%11%“或者charindex('11', MONTHS)>0回返回上面的记录,但实际不应该返回 不过你这里的值范围仅是1-12问题还不大 我一般的处理方式是charindex(',11,', ','+MONTHS+',')>0(考虑分隔符)
中国风 2016-01-11
  • 打赏
  • 举报
回复
或在传参时用表类型
中国风 2016-01-11
  • 打赏
  • 举报
回复
这样实现
DECLARE @Where NVARCHAR(100)='01,04'


SET @Where='SELECT '''+REPLACE(@Where,',',''' UNION ALL SELECT ''')+''''


DECLARE @T TABLE(Col VARCHAR(10))
INSERT @T
        ( Col )
EXEC(@Where)

select * from tablename as a where exists(select 1 from @T where a.MONTHS like '%'+Col+'%' )
中国风 2016-01-11
  • 打赏
  • 举报
回复
引用 2 楼 wpl980 的回复:
[quote=引用 1 楼 roy_88 的回复:] select * from tablename where MONTHS like '%01%' or MONTHS like '%04%'
谢谢回复,有没有更好的方法?[/quote] 可把条件先拆为一个数组也就是一个结果集表 查询时 select * from tablename as a where exists(select 1 from 条件拆后表 where a.MONTHS like '%'+Col+'%' )
wpl980 2016-01-11
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
select * from tablename where MONTHS like '%01%' or MONTHS like '%04%'
谢谢回复,有没有更好的方法?
中国风 2016-01-11
  • 打赏
  • 举报
回复
select * from tablename where MONTHS like '%01%' or MONTHS like '%04%'

27,579

社区成员

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

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