日期:2014-05-18  浏览次数:20454 次

查询字符串
我有一个字符串1,2,3,4,5,6,7,8,55
我现在想用SELECT语句把字符串中的数字查询为1列显示。
查询结果,例如:
Result
1
2
3
4
5
6
7
8
55

这个SELECT语句应该怎么写?

------解决方案--------------------


/*
功能:实现split功能的函数
*/

create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as

begin
declare @i int

set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)

while @i > = 1
begin
insert @temp values(left(@inputstr, @i - 1))

set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end

if @inputstr <> '\ '
insert @temp values(@inputstr)

return
end
go

--调用

declare @s varchar(1000)

set @s= '1,2,3,4,5,6,7,8,55 '

select * from dbo.fn_split(@s, ', ')

drop function dbo.fn_split



------解决方案--------------------
declare @str as varchar(20)
set @str = '1,2,3,4,5,6,7,8,55 '

declare @sql varchar(8000)
set @sql= 'select ' ' '+replace(@str, ', ', ' ' ' union all select ' ' ')+ ' ' ' '
exec( @sql )

/*

----
1
2
3
4
5
6
7
8
55
*/
------解决方案--------------------
declare @str varchar(8000)
set @str= '1,2,3,4,5,6,7,8,55 '

set @str= 'select '+replace(@str, ', ', ' union all select ')

exec(@str)
------解决方案--------------------
declare @str as varchar(100),@sql varchar(8000)
set @str = '1,2,3,4,5,6,7,8,55 '

set @sql= 'select '+replace(@str, ', ', ' union all select ')
exec( @sql )

------解决方案--------------------
declare @str varchar(8000)
set @str= '1,2,3,4,5,6,7,8,55 '

set @str= 'select '+replace(@str, ', ', ' union all select ')

exec(@str)
-------
顶~很久没用,都忘了有这个方法啦
------解决方案--------------------
参考:

CREATE TABLE A(id INT,country VARCHAR(100))
INSERT A
SELECT 1, '中国;日本;韩国 ' UNION ALL
SELECT 2, '美国;意大利;法国 ' UNION ALL
SELECT 3, '德国 '
SELECT * FROM A

-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b


SELECT
A.ID,
COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX( '; ', A.COUNTRY + '; ', B.ID) - B.ID)
FROM A, # B
WHERE SUBSTRING( '; ' + a.COUNTRY, B.id, 1) = '; '
ORDER BY 1,2
GO

DROP TABLE A,#

id country
----------- ----------------
1 中国;日本;韩国
2 美国;意大利;法国
3 德国

(所影响的行数为 3 行)

ID COUNTRY
----------- ---------
1 韩国
1 日本
1 中国
2 法国
2 美国
2 意大利
3 德国

(所影响的行数为 7 行)