2、通配符是用来通配的,也就是shell在做Pattern Expansion时用到的
个人理解是:正则表达式包含 1、通配符和2、模式规则
Linux shell
最常见通配符(wildcard 万能牌)
数字 [0-9]
字母 [a-z]
非字母[^a-z]
非数字[^0-9]
任意符号 *
转义符号 \
模式规则
大写 [[:upper:]]
小写 [[:lower:]]
数字 [[:digit:]]
字母 [[:alpha:]]
数字+字母[[:alnum:]]
空格 [[:blank:]]
SQL只能用通配符,而不能用模式规则
平时,我们会用like 来匹配数据,而SQL可以用的通配符如下
实验数据库:SQL Server2012
例子
1、我们希望从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人
-
SELECT * FROM Persons
- WHERE City LIKE 'Ne%'
2、我们希望从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:
-
SELECT * FROM Persons
- WHERE City LIKE '%lond%'
-
SELECT * FROM Persons
- WHERE FirstName LIKE '_eorge'
4、我们希望从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
-
SELECT * FROM Persons
- WHERE LastName LIKE 'C_r_er'
5、我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
-
SELECT * FROM Persons
- WHERE City LIKE '[ALN]%'
6、我们希望从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
-
SELECT * FROM Persons
- WHERE City LIKE '[!ALN]%'
7、转义 使用ESCAPE关键字
不适合使用[charlist]来排除:WHERE [name] LIKE 'DBBackup!_[^Opinion]%' ESCAPE '!'
- SELECT * FROM [dbo].[aaa] WHERE [name] LIKE 'DBBackup!_%' ESCAPE '!' AND [name] NOT LIKE '%Opinion%'
8、误区 我们用得最多就是匹配字符串,其实也可以匹配其他数据类型,只不过不能用通配符已而
不用通配符,那么like就失去威力了
表结构
- CREATE TABLE testwildcard(id INT,timel DATETIME,name NVARCHAR(100))
- SELECT * FROM [dbo].[testwildcard] WHERE [id] LIKE 1
匹配datetime类型
- SELECT * FROM [dbo].[testwildcard] WHERE [timel] LIKE CAST('2015-02-12 00:28:58' AS DATETIME)