1. sql语句中通配符有几种
SQL语句中通配符有四种,分别是百分号%、下划线_、方括号[ ]、方括号[^](或[!])。
百分号%:替代0个或多个字符
下划线_:仅替代一个字符
方括号[ ]:字符列中的任何单一字符,使用方法:[charlist]
方括号[^]或者方括号[!]不在字符列中的任何单一字符,使用方法:[^charlist]或[!charlist]。
(1)sql一串数字通配符扩展阅读:
sql通配符用来执行模糊搜索指令的语句功能。在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。如在数据中搜索以大写“A”字母开头的字符类型数据,可以使用like "A%"。
不过,MySQL、SQLite只支持%和_通配符,不支持[^charlist]或[!charlist]通配符(MS Access 支持,微软 office 对通配符一直支持良好,但微软有时候的通配符不支持%,而是*,具体看对应软件说明)。
MySQL 和 SQLite 会把like '[xxx]yyy'的中括号当成普通字符,而不是通配符。
参考资料:网络——SQL 通配符
2. sql 通配符的用法
SELECT <列名列表> FROM<表名>WHERE <列名> LIKE{套式}
--功能:从指定表中选择符合套式中的条件的所有项 注:LIKE 通常情况下与通配符分不开,一下是对通配符的介绍:
--1)* 代表多个字符
--例如:a*a 可代表 aba,aBa,ahfklsdha,等
--2)% 代表多个字符
--例如:a%a 可代表aba,aBa,aafdaka,等
--3)?代表单字符
--例如:a?a 可代表 aba,aca,aCa,等
--4)# 代表单数字
--例如:a#a 可代表 a1a,a5a,a0a,等
--5)[charlist] 字符列中的任何单一字符
--例如:[A-Z] 代表a 到 z的26个字母中的任意一个字符 [ALN]代表A或L或N
--6) [!charlist] 或 [^charlist] 代表不再范围之内的任意一个字符
--例如:[!a-z] 代表不再a 到z 范围之内的任意一个字符
select Id,city from Domestic where city like ('%,')
--city结尾为,号在表Domestic中的Id,city字段
select Id,city from Domestic where city not like ('% %')
--city中没有空格在表Domestic中的Id,city字段
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
--Persons 表中选取City字段不以 "A" 或 "L" 或 "N" 开头的
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
--Persons 表中选取City字段以 "A" 或 "L" 或 "N" 开头的
3. SQL 查询一列中,数字字符串中,最后一个数字字段的简单语句
结论:作为补充,我们使用MySQL字符串操作函数进行筛选。
like
只要是字符串操作函数,可达到筛选目的的一般均可使用。
但是查询性能需视情况而定。
以上。
4. 请教sql通配符的问题,请高手帮忙
确定特定字符串是否与指定模式相匹配。模式可以包含常规字符和通配符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。但是,通配符可以与字符串的任意部分相匹配。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何一个参数都不属于字符串数据类型,则 SQL Server 2005 Database Engine 会将其转换为字符串数据类型(如果可能)。
Transact-SQL 语法约定
语法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
备注
如果使用 LIKE 执行字符串比较,则模式字符串中的所有字符都有意义。这包括前导或尾随空格。如果查询中的比较要返回包含 "abc "(abc 后有一个空格)的所有行,则不会返回包含 "abc"(abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含 "abc"(abc 后没有空格)的所有行,则返回以 "abc" 开始并且具有零个或多个尾随空格的所有行。
由于数据存储方式的原因,使用包含 char 和 varchar 数据的模式的字符串比较可能无法通过 LIKE 比较。您应当了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因。以下示例将本地 char 变量传递给存储过程,然后使用模式匹配来查找其姓氏以一组指定的字符开始的所有雇员。
USE AdventureWorks;
GO
CREATE PROCEDURE FindEmployee @EmpLName char(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT c.FirstName, c.LastName, a.City
FROM Person.Contact c JOIN Person.Address a ON c.ContactID = a.AddressID
WHERE c.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
GO
当名字中包含的字符数小于 20 时,char 变量 (@EmpLName) 将包含尾随空格,这导致 FindEmployee 过程中没有行返回。由于 LastName 列为 varchar 类型,因此没有尾随空格。因为尾随空格是有意义的,所以此过程失败。
但以下示例会成功,因为没有向 varchar 变量中添加尾随空格。
USE AdventureWorks;
GO
CREATE PROCEDURE FindEmployee @EmpLName varchar(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT c.FirstName, c.LastName, a.City
FROM Person.Contact c JOIN Person.Address a ON c.ContactID = a.AddressID
WHERE c.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
下面是结果集:
FirstName LastName City
---------- ----------------------------------------
Angela Barbariol Snohomish
David Barber Snohomish
(2 row(s) affected)
使用 LIKE 的模式匹配
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。如果所有参数(match_expression、pattern 和 escape_character,如果存在)均为 ASCII 字符数据类型,则执行 ASCII 模式匹配。如果任何一个参数为 Unicode 数据类型,则所有参数都将转换为 Unicode,并执行 Unicode 模式匹配。当 Unicode 数据(nchar 或 nvarchar 数据类型)与 LIKE 一起使用时,尾随空格有意义;但对非 Unicode 数据,尾随空格则没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容。
下面的一系列示例显示 ASCII LIKE 模式匹配与 Unicode LIKE 模式匹配所返回的行之间的差异。
-- ASCII pattern matching with char column
CREATE TABLE t (col1 char(30));
INSERT INTO t VALUES ('Robert King');
SELECT *
FROM t
WHERE col1 LIKE '% King' -- returns 1 row
-- Unicode pattern matching with nchar column
CREATE TABLE t (col1 nchar(30));
INSERT INTO t VALUES ('Robert King');
SELECT *
FROM t
WHERE col1 LIKE '% King' -- no rows returned
-- Unicode pattern matching with nchar column and RTRIM
CREATE TABLE t (col1 nchar (30));
INSERT INTO t VALUES ('Robert King');
SELECT *
FROM t
WHERE RTRIM(col1) LIKE '% King' -- returns 1 row
注意:
LIKE 比较受排序规则影响。有关详细信息,请参阅 COLLATE (Transact-SQL)。
使用 % 通配符
如果指定 LIKE '5%' 符号,则数据库引擎 将搜索后跟零个或多个任意字符的数字 5。
例如,以下查询显示 AdventureWorks 数据库中的所有动态管理视图,因为它们全部以字母 dm 开始。
USE AdventureWorks;
GO
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO
若要查看所有非动态管理视图的对象,请使用 NOT LIKE 'dm%'。如果共有 32 个对象且 LIKE 找到 13 个与模式匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象。
使用 LIKE '[^d][^m]%' 之类的模式不一定每次找到的名称都相同。可能仅找到 14 名称(而不是 19 个),除了动态管理视图名称外,所有以 d 开始或第二个字母为 m 的名称也都将从结果中消除。这是因为用反向通配符匹配字符串是分步骤进行计算的,一次一个通配符。如果在计算过程中任一环节匹配失败,那么就会将其消除。
将通配符作为文字使用
可以将通配符模式匹配字符作为文字字符使用。若要将通配符作为文字字符使用,请将通配符放在方括号中。下表显示了几个使用 LIKE 关键字和 [ ] 通配符的示例。
符号 含义
LIKE '5[%]'
5%
LIKE '[_]n'
_n
LIKE '[a-cdf]'
a、b、c、d 或 f
LIKE '[-acdf]'
-、a、c、d 或 f
LIKE '[ [ ]'
[
LIKE ']'
]
LIKE 'abc[_]d%'
abc_d 和 abc_de
LIKE 'abc[def]'
abcd、abce 和 abcf
使用 ESCAPE 子句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定 WHERE comment LIKE '%30!%%' ESCAPE '!' 之类的 WHERE 子句。如果未指定 ESCAPE 和转义符,则数据库引擎 将返回包含字符串 30 的所有行。
如果 LIKE 模式中的转义符后面没有字符,则该模式无效并且 LIKE 返回 FALSE。如果转义符后面的字符不是通配符,则将放弃转义符并将该转义符后面的字符作为该模式中的常规字符处理。这包括百分号 (%)、下划线 (_) 和左括号 ([) 通配符(如果它们包含在双括号 ([ ]) 中)。另外,在双括号字符 ([]) 内,可以使用转义符并将插入符号 (^)、连字符 () 和右括号 (]) 转义。
参数
match_expression
任何有效的字符数据类型的表达式。
pattern
要在 match_expression 中搜索并且可以包括下列有效通配符的特定字符串。pattern 的最大长度可达 8,000 字节。
通配符 说明 示例
%
包含零个或多个字符的任意字符串。
WHERE title LIKE '%computer%' 将查找在书名中任意位置包含单词 "computer" 的所有书名。
_(下划线)
任何单个字符。
WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
[ ]
指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
WHERE au_lname LIKE '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。
[^]
不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。
escape_character
放在通配符之前用于指示通配符应当解释为常规字符而不是通配符的字符。escape_character 是字符表达式,无默认值,并且计算结果必须仅为一个字符。
结果类型
Boolean
结果值
如果 match_expression 与指定的 pattern 相匹配,则 LIKE 返回 TRUE。
示例
A. 使用带 % 通配符的 LIKE
以下示例在 Contact 表中查找区号不是 415 的所有电话号码。
USE AdventureWorks;
GO
SELECT FirstName, LastName, Phone
FROM Person.Contact
WHERE phone LIKE '415%'
ORDER by LastName;
GO
下面是结果集:
FirstName LastName phone
----------------- ---------------- ------------
Ruben Alonso 415-555-0124
Shelby Cook 415-555-0121
Karen Hu 415-555-0114
John Long 415-555-0147
David Long 415-555-0123
Gilbert Ma 415-555-0138
Meredith Moreno 415-555-0131
Alexandra Nelson 415-555-0174
Taylor Patterson 415-555-0170
Gabrielle Russell 415-555-0197
Dalton Simmons 415-555-0115
(11 row(s) affected)
B. 使用带 % 通配符的 NOT LIKE
以下示例在 Contact 表中查找区号不是 415 的所有电话号码。
USE AdventureWorks;
GO
SELECT FirstName, LastName, Phone
FROM Person.Contact
WHERE Phone NOT LIKE '415%' AND FirstName = 'Gail'
ORDER BY LastName;
GO
下面是结果集:
FirstName LastName Phone
--------- ---------- -------------------
Gail Alexander 1 (11) 500 555-0120
Gail Butler 1 (11) 500 555-0191
Gail Erickson 834-555-0132
Gail Erickson 849-555-0139
Gail Griffin 450-555-0171
Gail Moore 155-555-0169
Gail Russell 334-555-0170
Gail Westover 305-555-0100
(8 row(s) affected)
C. 使用 ESCAPE 子句
以下示例使用 ESCAPE 子句和转义符在 mytbl2 表的列 c1 中查找精确字符串 10-15%。
USE tempdb;
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2')
DROP TABLE mytbl2;
GO
USE tempdb;
GO
CREATE TABLE mytbl2
(
c1 sysname
);
GO
INSERT mytbl2 VALUES ('Discount is 10-15% off');
INSERT mytbl2 VALUES ('Discount is .10-.15 off');
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';
GO
D. 使用 [ ] 通配符
以下示例查找名字为 Cheryl 或 Sheryl 的 Contacts。
USE AdventureWorks;
GO
SELECT ContactID, FirstName, LastName
FROM Person.Contact
WHERE FirstName LIKE '[CS]heryl';
GO
以下示例查找姓氏为 Zheng 或 Zhang 的 Contacts 行。
USE AdventureWorks;
GO
SELECT LastName, FirstName, Phone
FROM Person.Contact
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC, FirstName ASC;
GO
以上是SQLSERVER中的帮助。不知道是不是你想要的。
5. SQL里通配符的使用
在VFP6.0中,通配符有两种,一种是“*”表示任何一串字符,还有一种是“?”,表示任何一个字符。
在SQL查询语句中有时用到模糊查询。格式为:<属性名> like <字符串常量>
属性名必须为字符型。例如:查询某班所有姓张的同学
select * from student where 姓名 like '张%'
这儿必须用“like”,所以一楼是错的
%表示任意长度的字符
_表示一个字符
6. SQL语句中包含哪两类通配符进行字符串查询
% 和_ 是通配符,%代表一个或多个字符, _代表一个字符
select* from 表名 where 字段 like '%a'----查询以a结束的信息
select* from 表名 where 字段 like '_a'----查询以a结束的2个字符的信息
select* from 表名 where 字段 like '%[abc]'----查询以 a或者b或者c 结束的信息
select* from 表名 where 字段 like '%[^a]'----查询不以 a 结束的信息
7. SQL 通配符的使用
例子 1
现在,我们希望从上面的 Persons 表中选取名字的第一个字符之后是 eorge 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM PersonsWHERE FirstName LIKE '_eorge'结果集: Id LastName FirstName Address City 2 Bush George Fifth Avenue New York 接下来,我们希望从 Persons 表中选取的这条记录的姓氏以 C 开头,然后是一个任意字符,然后是 r,然后是任意字符,然后是 er:
我们可以使用下面的 SELECT 语句:
SELECT * FROM PersonsWHERE LastName LIKE 'C_r_er'结果集: Id LastName FirstName Address City 3 Carter Thomas Changan Street Beijing 例子 1
现在,我们希望从上面的 Persons 表中选取居住的城市以 A 或 L 或 N 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM PersonsWHERE City LIKE '[ALN]%'结果集: Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York
8. sql 通配符
%
包含零个或多个字符的任意字符串。
WHERE title LIKE '%computer%' 将查找在书名中任意位置包含单词 "computer" 的所有书名。
_(下划线)
任何单个字符。
WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
[ ]
指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
WHERE au_lname LIKE '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。
[^]
不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。
9. Sql通配符
% 零或者多个字符
_ 单一任何字符(下划线)
\ 特殊字符
[] 在某一范围内的字符,如[0-9]或者[aeth]
[^] 不在某范围内的字符,如[^0-9]或者[^aeth]