From:http://www.cnblogs.com/goody9807/archive/2011/07/27/2118107.html
sql中的某個字段用“,”分隔數據,
需要獲取數據的時候直接把“,”拆分成數據,獲得一個數據的list。
例如:需要查詢某字段是否包含一個值,
111是否存在於1111,2111,1112,1121,1113這個字段中 。
因為根據“,”逗號分開,要求的答案是:不在字段中。
用傳統的like '%111%',顯然不合適,這樣雖然111不存在但是依然能查到該條記錄。
所以應該用以下語句實現:
select * from Table where ','+columA+',' like '%,111,%'。
實際就是把字段填上一個逗號然后在比較。如果你的字段是用別的分隔符,同理可得。
假設我們有一字段名為name,其值是用逗號分隔的。
值為:'111,111xu2,1112'。
現在,我們需要編寫語句搜索該name值 like '11'的。
按理說,這個name中沒有11,我們要的結果就是返回空。
但是如果我們 select * from student where name like '%11%'的話,依然可以正常的查詢出結果。
---
此時,我們應該采用如下的語句來實現:
--解決辦法是:將sql字段名前后加上,號,並且比較值前后也加上。
--特別注意的是:字段名加逗號時,要用字符串連接的形式,不能直接 ',name,'
select * from student where ','+name+',' like '%,111,%'
方式一:通過charindex和substring。

執行:select * from dbo.func_splitstring('1,2,3,4,5,6', ',')
結果:
方式二:通過XQuery(需要SQL Server 2005以上版本)。

執行:select * from dbo.func_splitid('1,2,3,4,5,6', ',')
結果: