sql 查询分割

zhiyankemeifen 2015-08-19 06:31:14

求分割userid: 3721,3722,3723,3725
分割成
3721
3722
3723
3725这样子,不用创建表 求查询方法,能统计更好
...全文
174 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Haytor 2015-08-20
  • 打赏
  • 举报
回复
参考一下这个脚本

DECLARE @str VARCHAR(20)='3721,3722,3723,3725'
DECLARE @xml XML

SET @xml = '<row>'+REPLACE(@str,',','</row><row>')+'</row>'

SELECT 
	T.c.value('.','nvarchar(32)') AS Nums
FROM 
	@xml.nodes('/row') T(c)

「已注销」 2015-08-20
  • 打赏
  • 举报
回复
引用 3 楼 Landa_Ran 的回复:
declare @str varchar(20)='3721,3722,3723,3725'

set @str+=','
;with cte as
(
	select LEFT(@str,CHARINDEX(',',@str)-1) as strs,RIGHT(@str,LEN(@str)-CHARINDEX(',',@str)) as val
	union all
	select LEFT(val,CHARINDEX(',',val)-1) as strs,RIGHT(val,LEN(val)-CHARINDEX(',',val)) as val
	from cte
	where LEN(val)>0
)
select strs from cte
strs
--------------------
3721
3722
3723
3725

(4 行受影响)
求大牛写详细点 表名是 F 然后那个字段userid 可以根据fwid=29 type=0的条件来查
「已注销」 2015-08-20
  • 打赏
  • 举报
回复
引用 2 楼 reo126 的回复:
没很明白你的意思,是直接替换格式还是要拆分出来存在另一个表?如果是替换格式直接使用替换,把,替换成换行符就行了 replace(字段,',',char(13))
直接查询出来 不用存另外的表,这换行符能输出成3楼那样的?
「已注销」 2015-08-20
  • 打赏
  • 举报
回复
引用 3 楼 Landa_Ran 的回复:
declare @str varchar(20)='3721,3722,3723,3725'

set @str+=','
;with cte as
(
	select LEFT(@str,CHARINDEX(',',@str)-1) as strs,RIGHT(@str,LEN(@str)-CHARINDEX(',',@str)) as val
	union all
	select LEFT(val,CHARINDEX(',',val)-1) as strs,RIGHT(val,LEN(val)-CHARINDEX(',',val)) as val
	from cte
	where LEN(val)>0
)
select strs from cte
strs
--------------------
3721
3722
3723
3725

(4 行受影响)
能写简单一点吗 因为要放到java里面 直接表名 字段这样,你写得这个我看不懂
许晨旭 2015-08-19
  • 打赏
  • 举报
回复
declare @str varchar(20)='3721,3722,3723,3725'

set @str+=','
;with cte as
(
	select LEFT(@str,CHARINDEX(',',@str)-1) as strs,RIGHT(@str,LEN(@str)-CHARINDEX(',',@str)) as val
	union all
	select LEFT(val,CHARINDEX(',',val)-1) as strs,RIGHT(val,LEN(val)-CHARINDEX(',',val)) as val
	from cte
	where LEN(val)>0
)
select strs from cte
strs
--------------------
3721
3722
3723
3725

(4 行受影响)
reo126 2015-08-19
  • 打赏
  • 举报
回复
没很明白你的意思,是直接替换格式还是要拆分出来存在另一个表?如果是替换格式直接使用替换,把,替换成换行符就行了 replace(字段,',',char(13))
shoppo0505 2015-08-19
  • 打赏
  • 举报
回复
用CTE的递归可以解决

34,594

社区成员

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

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