手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

幫助中心 >  技術知識庫 >  數據庫 >  相關技術支持 >  字符串在某字段里時,如何寫搜索的SQL語句

字符串在某字段里時,如何寫搜索的SQL語句

2018-01-18 23:34:48 9684

問題描述:

經常遇到這種問題,我們搜索的條件是某字符串包含在某字段,如果是某字段包含在某字符串,我們知道可以用in,如sql="select * form tb where tb.name in(" & names & " )”  注釋:name是表tb的字段,name是獲得的字符串,該句查詢字段name在給的字符串names里的所有集合)

這種方法自然不必多說,但我們通常遇到的問題是“反著來”,即  "name"字符串 在 tb.name表字段里,如,表tb的name字段值為:張三,李四,王五,趙六而我們要查詢的name=張三,這就要判斷當表的name字段包含查詢條件,也就是有“張三”時,即為符合查詢


解決方法:

1、最先想到的當然是like查詢。如sql="select * form tb where tb.name  like  '%" & 張三 & "%' ” 

這個語句能查詢到所有表的name字段里有”張三“的集合,可是,假設有人的名字叫”秦張三八“,也有”張三“兩個字,這樣很顯然也符合查詢情況,那么他自然也會被查詢出來,而我們只要”張三“,不要”秦張三八“,如何解決?


2、試想一下,如果字段里的值不是“張三,李四,王五,趙六”,而是“,張三,李四,王五,趙六,”

發現什么了?

是的,字符串前后多了個逗號,這就有用了,因為限制條件,按逗號來控制查詢,就精確到位了。

好了,改寫查詢成:sql="select * form tb where tb.name  like  '%," & 張三 & ",%' ”

到此,原理和解決方法就已經全部說完了,但是,你可能還會遇到以下問題,繼續看第三步。


3、有時類似這種帶逗號的字段都是我們在保存的時候勾選了多選check得來的值,

這時寫入數據庫的時候,會自動在不同的check值后加上逗號。

比如,請選擇你的興趣愛好,你可能會勾選“看書(value=1)”,“聽歌(value=21)”,“爬山(value=13)”

此時得到的值就是xingquaihao="1, 21, 13",將這個字段保存,在數據庫里也就是這種格式,但是此時如果直接按照上面的查詢方式來查詢的話,

直接用:sql="select * form tb where xingquaihao  like  '%" & 1 & "%' ”   將得到所有含1的,就算是21、13中的1,也會被查出來

將字段前后加上逗號,變成“,1, 21, 13,”的時候,如果我們查21或者13,改成:sql="select * form tb where xingquaihao  like  '%," & 21 & ",%' ” 

結果是什么都查不出來


為什么明明有值,卻查不出來呢?

因為自動勾選,然后保存的字段中間有空格,比如“1, 21, 13”,1的后面是一個逗號,逗號后面是一個空格,然后才是21

解決方法很簡單了,在勾選完后,入庫前把空格去掉,

xingquaihao="1, 21, 13"

xingquaihao=replace(xingquaihao," ","") '將空格刪除

之后再查詢就可以有結果了

提交成功!非常感謝您的反饋,我們會繼續努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: