日期:2014-05-19  浏览次数:20542 次

跟据带分隔符的字符串查询 要求查询结果顺序一致
跟据带分隔符的字符串   c,z,j,k,a
查询表a中纪录,结果要和字符串顺序一致
表a

字段1   字段2
c           20.0
z           2.0
j           3.0
k           1.0
a           2.0

------解决方案--------------------
参考:

create table tblTest(PdID int,PdName varchar(100))

insert tblTest
select 1, 'A10 ' union all
select 2, 'A20,A20S ' union all
select 3, 'A30,A30K,A30M ' union all
select 4, 'A301 ' union all
select 5, 'A301M '
select * from tblTest
go

-- 建立一个辅助的临时表就可以了
SELECT TOP 8000
id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b
-- 这个辅助表是什么含义,为下一步铺垫的目的是什么?
-- 以上生成一个临时表

SELECT
A.PdID,
PdName = SUBSTRING(A.PdName, B.ID, CHARINDEX( ', ', A.PdName + ', ', B.ID) - B.ID) --这个SUBSTRING在B.ID每一次执行的时候的值是多少?
FROM tblTest A, # B
WHERE SUBSTRING( ', ' + a.PdName, B.id, 1) = ', ' --这个where后面的检索条件又代表什么含义?
ORDER BY 1,2
GO

DROP TABLE tblTest, #


即:

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 行)



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

where charindex( ', '+字段1+ ', ' , ',c,z,j,k,a, ') > 0

order by charindex( ', '+字段1+ ', ' , ',c,z,j,k,a, ')

------解决方案--------------------
where charindex( ', '+字段1+ ', ' , ',c,z,j,k,a, ') > 0

order by charindex( ', '+字段1+ ', ' , ',c,z,j,k,a, ')