求複雜的sql查詢語句,涉及到模糊匹配的

時間 2022-02-11 10:25:16

1樓:匿名使用者

為什麼是0,3這樣呢? 0明顯沒有對應的classid啊id classid productname1 1,2 產品一

2 1,3 產品二

3 1,2,3 產品三

查詢分類3的方法:

select * from product where classid like '%3,%' or classid like '%,3%' or classid like '%,3,%'

當然上面的方式比較笨拙,但是樓主的資料表結構顯然還是不夠優化的。

一般來說,我們在設計類似樓主這個product表結構的時候,會限制其classid的最大個數。例如規定一個產品最多同時屬於3個分類,那麼在儲存的時候我們可以:

id classid productname1 1,2,0 產品一

2 1,3,0 產品二

3 1,2,3 產品三

如上結構,查詢分類3,我們就可以這樣查詢了:

select * from product where classid like '3,[^3],[^3]' or classid like ''[^3],3,[^3]' or classid like '[^3],[^3],3'

2樓:匿名使用者

select * from product where id > 0 and ',' + classid + ',' like '%,1,%' and istop = 1

這樣寫肯定行

3樓:匿名使用者

class表的結構建立得不好。parentpath應該把一個分量拆成多個分量,像下面這樣存資料:

classid classname parentpath1 分類一 0

2 分類二 0,

2 分類二 1

3 分類三 0,

3 分類三 1,3 分類三 2

然後用(classid,parentpath)做主鍵。

結構改合適了,查詢就容易

sql語句進行模糊查詢時如何同時用一句話篩選多個關鍵詞

4樓:匿名使用者

1、建立測試表,create table test_a(zlyt varchar2(20));

2、插入測試資料,並提交;

insert into test_a values('abc');

insert into test_a values('dfs');

insert into test_a values('rte');

commit;

3、執行sql語句,

select zlyt, replace(replace(zlyt, 'b', 'x'), 'f', 'x') zlyt2

from test_a t

where zlyt like '%b%'

or zlyt like '%f%'

擴充套件資料

1、在進行資料庫查詢時,有完整查詢和模糊查詢之分。

一般模糊查詢語句如下:select 欄位 from 表 where 某欄位 like 條件,其中關於條件,sql提供了四種匹配模式:

1)% :表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號(%%)表示。

2)_ : 表示任意單個字元。匹配單個任意字元,它常用來限制表示式的字元長度語句:

3)[ ] :表示括號內所列字元中的一個(類似正規表示式)。指定一個字元、字串或範圍,要求所匹配物件為它們中的任一個。

4)[^ ] :表示不在括號所列之內的單個字元。其取值和 相同,但它要求所匹配物件為指定字元以外的任一個字元。

2、replace官方語法:

replace ( string_expression , string_pattern , string_replacement )

1)引數含義:

string_expression 要搜尋的字串表示式。string_expression 可以是字元或二進位制資料型別。

string_pattern 是要查詢的子字串。string_pattern 可以是字元或二進位制資料型別。string_pattern 不能是空字串 ('')。

string_replacement 替換字串。string_replacement 可以是字元或二進位制資料型別。

2)返回型別:

如果其中的一個輸入引數資料型別為 nvarchar,則返回 nvarchar;否則 replace 返回 varchar。

如果任何一個引數為 null,則返回 null。

replace(string,from_str,to_str) 即:將string中所有出現的from_str替換為to_str。

5樓:流浪雲風

你自己都說了,使用模糊查詢就可以了。

如果是查詢zlyt中含有b或f可以這樣寫:

select * from 表名 where zlyt like '%b%' or zlyt like '%f%'

如果是查詢zlyt中含有b和f可以這樣寫:

select * from 表名 where zlyt like '%b%f%' or zlyt like '%f%b%';

不同的是先後順序,根據你的情況自己可能需要調整

更新:update 表名 set 欄位名 = 修改後的新值

where zlyt like '%b%' or zlyt like '%f%';

where條件可以參考上面select中where條件的寫法,看你要匹配的規則。

請教sql語句實現多條件模糊查詢比較好的寫法

6樓:匿名使用者

$sql = "select * from 表名 where id link '%$id%'";

sql模糊查詢語句怎麼寫啊

7樓:匿名使用者

使用sql 萬用字元可以替代一個或多個字元,即模糊查詢。

sql 萬用字元必須與 like 運算子一起使用。在 sql 中,可使用以下萬用字元如下:

1、%    替代一個或多個字元

2、_    僅替代一個字元

3、[charlist]    字元列中的任何單一字元

4、[^charlist]或者[!charlist] 不在字元列中的任何單一字元

以圖中**為例,說明一下各萬用字元用法

1、 查詢居住在以 "ne" 開始的城市裡的人:

select * from persons where city like 'ne%'

2、查詢居住在包含 "lond" 的城市裡的人:

select * from persons where city like '%lond%'

3、查詢名字的第一個字元之後是 "eorge" 的人:

select * from persons where firstname like '_eorge'

4、查詢記錄的姓氏以 "c" 開頭,然後是一個任意字元,然後是 "r",然後是任意字元,然後是 "er":

select * from persons where lastname like 'c_r_er'

5、查詢居住的城市以 "a" 或 "l" 或 "n" 開頭的人:

select * from persons where city like '[aln]%'

6、查詢居住的城市不以 "a" 或 "l" 或 "n" 開頭的人:

select * from persons where city like '[!aln]%'

8樓:填寫使用者名稱

select * from pwdmanger where 欄位 like '%123%' --你寫的這個沒問題啊,你把表的資料截圖貼上來。

9樓:我tm不管

select * from 表 where aaa not like '%'+@bbb+'%'

10樓:匿名使用者

select * from pwdmanger where [zid] like '%123%' or [name] like '%123%' or [url] like '%123%' or [id] like '%123%' or [pwd] like '%123%' or [mb] like '%123%'

11樓:夏日之一地陽光

select * from aaa not like '%'+@bbb+'%'

12樓:匿名使用者

怎麼根據名字查相應**(有資料庫)

13樓:

not like。試試

sql模糊查詢語句

14樓:

"%"可以表示多個字元,

"_"只能表示一個字元,

一個漢字是兩個字元,所以表示漢字應該用兩個_,即「__」

15樓:

一樓的回答我認為是正確的

不過樓主要是想弄的很清楚的話,建議下個系統看看人家裡面的模糊查詢是怎麼搞的

因為模糊可以是在一個欄位上的,也可以是在多個欄位上的啊再看看書什麼的,思考思考就很有自己的想法了

16樓:幸巴達

用like加萬用字元"_", "%".

sql語句中,如何同時模糊查詢多個字串

17樓:匿名使用者

把這些姓插入到一個新表中

比如 表:a

name張李

select 姓名.* from 姓名,a where 姓名.name like a.name + '%'

18樓:匿名使用者

select * from name where 姓名 like '[張李趙錢孫]%'

19樓:匿名使用者

你看下面的方法,是否能幫到你:

select * from name where substr(姓名,1,1) in ('李','張','劉');

sql語句如何模糊查詢兩個表中兩列的包含情況 50

20樓:匿名使用者

select * from 表名 where [col1] like convert(nvarchar,'%'+(select col2 from dbo.userinfo where 條件)+'%') //注意 因為 like '%%這裡面的模糊查詢數量唯一 所以 (select col2 from dbo.userinfo where 條件) 必須唯一 這裡就不能再有幾個條件了 追問:

如果資料是在兩張表呢?即表a col1 大連市中山區 表b col2 中山 怎樣能查處col1包含col2的資料呢? 回答:

select * from 表名1 where [col1] like convert(nvarchar,'%'+(select col2 from 表名2 where 條件)+'%') 這裡有2個 % 如果你想要 中山%就去掉前面一個 具體點就是 如果 要 %中山 就去掉後面一個比如你要選擇 col1 的資料要和某個酒店所在的地方 比如 表b col3 中存的是酒店名稱 酒店是 萬達酒店 對應的 col2是 中山 select * from 表名1 where [col1] like convert(nvarchar,'%'+(select col2 from 表名2 where col3 ='萬達酒店')+'%') 這樣就篩選出了 所有和萬達酒店所在地方名字類似的地區了

sql語句的where查詢語句中 select userid

這裡的 是引數佔位符,表示在執行查詢時用傳入的引數替換該內容在你的例子中,pstmt.setstring 1,userid 將應用得到的引數userid傳給第一個引數,pstmt.setstring 2,password 將應用得到的引數password傳給第二個引數 小白九久玩科技 where u...

求一SQL語句 如何查詢最大的前值

三點水加個木 mysql用法 select 欄位名 from 表名 order by 欄位名 desc limit 3 mssql用法 select top 3 欄位名 from 表名 order by 欄位名 desc 丸紙 查詢最大的前3個值的方法及編寫方式 1 select max 欄位 值1...

汽車換擋涉及到的物理知識p f,汽車換擋涉及到的物理知識P F V

是的,汽車的最大功率是不變的,如果想在上坡是得到足夠的牽引力,就必須減擋降速,這樣牽引力f就增大了。p 不變 f 增大 v 減小 追問 簡單的說,我想要發動機的工作原理吧,發動機是如何換擋而降速的?這個題不應當再考慮發動機怎麼了。發動機的輸出功率和轉速都應當假設為不變,理解了p 不變 f 增大 v ...