查询字符串
我有一个字符串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 行)