当前位置:首页 » 编程语言 » SQL中匹配和包含
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

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+'%'