sql like in 語句獲取以逗號分割的字段內的數據


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%'的話,依然可以正常的查詢出結果。

---

此時,我們應該采用如下的語句來實現:

 

select * from student where name like '%11%' --按照我的想法是不能查到的。但結果是查到了
--解決辦法是:將sql字段名前后加上,號,並且比較值前后也加上。
--特別注意的是:字段名加逗號時,要用字符串連接的形式,不能直接 ',name,'
select * from student where ','+name+',' like '%,111,%'

 

   在與數據庫交互的過程中,我們經常需要把一串ID組成的字符串當作參數傳給存儲過程獲取數據。很多時候我們希望把這個字符串轉成集合以方便用於in操作。 有兩種方式可以方便地把這個以某種符號分隔的ID字符串轉成臨時表。

 

方式一:通過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', ',')

結果:

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM