當前位置:首頁 » 編程語言 » SQL中匹配和包含
擴展閱讀
sql轉化成字元串 2023-02-09 00:13:22
雲服務相片存儲 2023-02-08 22:12:49

SQL中匹配和包含

發布時間: 2023-01-25 12:00:15

sql中可以實現多個關鍵詞匹配的搜索功能嗎

explode把用戶輸入的關鍵詞拆分成數組,然後$str = implode("%' or like '%",array);

然後$sql = "select * from table where name like '%".$str."%'";
當然你explode之前要先處理返回的關鍵詞字元串,去掉多餘的空格和符號

❷ sql 包含於語法

IN
確定給定的值是否與子查詢或列表中的值相匹配。

語法
test_expression [ NOT ] IN
(
subquery
| expression [ ,...n ]
)

參數
test_expression

是任何有效的 Microsoft® SQL Server™ 表達式。

subquery

是包含某列結果集的子查詢。該列必須與 test_expression 有相同的數據類型。

expression [,...n]

一個表達式列表,用來測試是否匹配。所有的表達式必須和 test_expression 具有相同的類型。

結果類型
布爾型

結果值
如果 test_expression 與 subquery 返回的任何值相等,或與逗號分隔的列表中的任何 expression 相等,那麼結果值就為 TRUE。否則,結果值為 FALSE。

使用 NOT IN 對返回值取反。

示例
A. 對比 OR 和 IN
下面的示例選擇名稱和州的列表,列表中列出所有居住在加利福尼亞、印地安納或馬里蘭州的作者。

USE pubs

SELECT au_lname, state
FROM authors
WHERE state = 'CA' OR state = 'IN' OR state = 'MD'

但是,也可以使用 IN 獲得相同的結果:

USE pubs

SELECT au_lname, state
FROM authors
WHERE state IN ('CA', 'IN', 'MD')

以下是上面任一查詢的結果集:

au_lname state
-------- -----
White CA
Green CA
Carson CA
O'Leary CA
Straight CA
Bennet CA
Dull CA
Gringlesby CA
Locksley CA
Yokomoto CA
DeFrance IN
Stringer CA
MacFeather CA
Karsen CA
Panteley MD
Hunter CA
McBadden CA

(17 row(s) affected)

B. 將 IN 與子查詢一起使用
下面的示例在 titleauthor 表中查找從任一種書得到的版稅少於 50% 的所有作者的 au_ids,然後從 authors 表中選擇 au_ids 與 titleauthor 查詢結果匹配的所有作者的姓名。結果顯示有一些作者屬於得到的版稅少於 50% 的一類。

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id IN
(SELECT au_id
FROM titleauthor
WHERE royaltyper < 50)

下面是結果集:

au_lname au_fname
---------------------------------------- --------------------
Green Marjorie
O'Leary Michael
Gringlesby Burt
Yokomoto Akiko
MacFeather Stearns
Ringer Anne

(6 row(s) affected)

C. 將 NOT IN 與子查詢一起使用
NOT IN 將找到那些與值列表中的項目不匹配的作者。下面的示例查找至少有一種書取得不少於 50% 的版稅的作者姓名:

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id NOT IN
(SELECT au_id
FROM titleauthor
WHERE royaltyper < 50)

下面是結果集:

au_lname au_fname
---------------------------------------- --------------------
White Johnson
Carson Cheryl
Straight Dean
Smith Meander
Bennet Abraham
Dull Ann
Locksley Charlene
Greene Morningstar
Blotchet-Halls Reginald
del Castillo Innes
DeFrance Michel
Stringer Dirk
Karsen Livia
Panteley Sylvia
Hunter Sheryl
McBadden Heather
Ringer Albert

(17 row(s) affected)

❸ SQL多值匹配問題

沒辦法一句話寫出來,只能定義一個函數,在函數中計算兩個欄位的匹配度(因為是函數,你怎麼寫都可以)。然後在選擇的時候做個Max或order by。

❹ SQL Server 中四種匹配符的含義

% 代表零個或者多個任意字元_ 代表一個任意字元[] 指定范圍內的任意單個字元[^] 不在指定范圍內的任意單個字元帶有匹配符的字元串必須使用引號引起來 例如下面的示例 LIKE BR% 返回以 BR 開始的任意字元串 LIKE Br% 返回以 Br 開始的任意字元中 LIKE %een 返回以 een 結束的任意字元串 LIKE %en% 返回包含 en 的任意字元串 liKE en 返回以 en 結束的三個字元的字元串 LIKE [CK]% 返回以 C 或者 K 開始的任意字元串 LIKE [S V]lng 返回長為四個字元的字元串 結尾是 ing 開始是從S到VLIKE M[^c]% 返回以 M 開始且第二個字元不是 c 的任意字元串 注意 使用LIKE運算符通常會導致SQL Server不對給定的表使用與之聯系的索引 它告訴SQL server比較所指定的字元串並且找到與所提供的匹配符相匹配的任何內容 由於這種原固 不推薦在大型表上使用這種類型的搜索或者比較 至少應該提醒用戶 系統尋找滿足搜索標準的數據行時所需的等待時間非常重要 lishixin/Article/program/SQLServer/201311/22233

❺ sql語句包含怎麼寫

sql語句包含可寫成:select * from table1 where field1 like 』%value1%』(所有包含『value1』這個模式的字元串)。

sql語句用於資料庫查詢和程序設計,比如查詢表中某欄位值「包含」某字元串的所有記錄的方法如下:

如果表中有一個name欄位,查詢name包含「張三」的所有記錄,就可以這樣寫:Stirng strsql="SELECT * FROM 表名 WHERE name LIKE 』%"+"張三"+"%』"。

(5)SQL中匹配和包含擴展閱讀

sql語句包含的關聯詞

據了解,sql語句查詢某欄位值「包含於」某個字元串的所有記錄的方法如下:

如果查詢表中name欄位包含於字元串「張三是個好學生」的所有記錄,就可以這樣寫:String strsql="SELECT * FROM 表名 WHERE INSTR(』張三是個好學生』,name)>0"(記錄中的name欄位值中包括張、三、是、個、好、學、生、張三等所有記錄)。

❻ SQL語句 包含怎麼寫

使用SQL 通配符可以替代一個或多個字元,即模糊查詢,也就是包含關系。

SQL 通配符必須與 LIKE 運算符一起使用。在 SQL 中,可使用以下通配符如下:

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

2、_ 僅替代一個字元

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

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


以圖中表格為例,說明一下各通配符用法

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

SELECT * FROM PersonsWHERE City LIKE 'Ne%'

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

SELECT * FROM PersonsWHERE City LIKE '%lond%'

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

SELECT * FROM PersonsWHERE FirstName LIKE '_eorge'

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

SELECT * FROM PersonsWHERE LastName LIKE 'C_r_er'

5、查詢居住的城市以 "A" 或 "L" 或 "N" 開頭的人:

SELECT * FROM PersonsWHERE City LIKE '[ALN]%'

6、查詢居住的城市不以"A" 或 "L" 或 "N" 開頭的人:

SELECT * FROM PersonsWHERE City LIKE '[!ALN]%'

❼ sql語句的條件可以匹配一定的規則的數字嗎 如何匹配

不知道你的是怎麼規則的數字。我一般都是用oracle正則表達式。
oracle的正則表達式(10g才可以用)

oracle的正則表達式(regular expression)簡單介紹
目前,正則表達式已經在很多軟體中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統,PHP,C#,Java等開發環境。
Oracle 10g正則表達式提高了SQL靈活性。有效的解決了數據有效性,重復詞的辨認, 無關的空白檢測,或者分解多個正則組成的字元串等問題。
Oracle 10g支持正則表達式的四個新函數分別是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字元。
特殊字元:
'^' 匹配輸入字元串的開始位置,在方括弧表達式中使用,此時它表示不接受該字元集合。
'$' 匹配輸入字元串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或'\r'。
'.' 匹配除換行符 \n之外的任何單字元。
'?' 匹配前面的子表達式零次或一次。
'*' 匹配前面的子表達式零次或多次。
'+' 匹配前面的子表達式一次或多次。
'( )' 標記一個子表達式的開始和結束位置。
'[]' 標記一個中括弧表達式。
'{m,n}' 一個精確地出現次數范圍,m=<出現次數<=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。
'|' 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的字元串。
\num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。
正則表達式的一個很有用的特點是可以保存子表達式以後使用,被稱為Backreferencing. 允許復雜的替換能力
如調整一個模式到新的位置或者指示被代替的字元或者單詞的位置. 被匹配的子表達式存儲在臨時緩沖區

中,緩沖區從左到右編號, 通過\數字元號訪問。 下面的例子列出了把名字 aa bb cc 變成cc, bb, aa.
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM al;
REGEXP_REPLACE('ELLENHILDISMIT
cc, bb, aa
'\' 轉義符。
字元簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字元。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[unct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]。
各種操作符的運算優先順序
\ 轉義符
(), (?, (?=), [] 圓括弧和方括弧
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和順序
| 「或」操作
--測試數據
create table test(mc varchar2(60));
insert into test values('112233445566778899');
insert into test values('2344 5566778899');
insert into test values('33112244 5566778899');
insert into test values('44112233 5566 778899');
insert into test values('5511 2233 4466778899');
insert into test values('661122334455778899');
insert into test values('771122334455668899');
insert into test values('881122334455667799');
insert into test values('991122334455667788');
insert into test values('aabbccddee');
insert into test values('bbaaaccddee');
insert into test values('ccabbddee');
insert into test values('ddaabbccee');
insert into test values('eeaabbccdd');
insert into test values('ab123');
insert into test values('123xy');
insert into test values('007ab');
insert into test values('abcxy');
insert into test values('The final test is is is how to find plicate words.');
commit;
一、REGEXP_LIKE
select * from test where regexp_like(mc,'^a{1,3}');
select * from test where regexp_like(mc,'a{1,3}');
select * from test where regexp_like(mc,'^a.*e$');
select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
select * from test where regexp_like(mc,'^[[:lower:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');
Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');
二、REGEXP_INSTR
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;
Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;
Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;
三、REGEXP_SUBSTR
SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;
四、REGEXP_REPLACE
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM al;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM al;

❽ sql實現兩列數據的匹配

設表名為TABLENAME,列1為COL1,列2為COL2則這樣求出所有第一列在第二列中存在的記錄:
SELECT * FROM TABLENAME A WHERE COL1 IN(SELECT COL2 FROM TABLENAME)
===============================
SELECT * FROM TABLENAME A
WHERE EXISTS(SELECT 1 FROM TABLENAME B WHERE B.COL2 LIKE '%'+A.COL1+'%')

=========================
SELECT DISTINCT A.* FROM TABLENAME A,TABLENAME B WHERE B.COL2 LIKE '%'+A.COL1+'%'