3.4.2 字符串运算

3.4.2 字符串运算

字符串放在单引号中

SQL使用一对单引号来标示字符串,例如'Computer'

字符串中有单引号时怎么办

如果单引号是字符串的组成部分,就需要放到双引号中,然后单引号要写变成两个单引号,如字符串"it's right"可表示为"it''s right"

SQL标准中字符串大小写敏感

SQL标准中,字符串上的相等运算是大小写敏感的

MySQL匹配字符串时默认不区分大小写

然而一些数据库系统,如MySQLSQL Server,在匹配字符串时并不区分大小写,然而这种默认方式是可以在数据库级或特定属性级被修改的。

SQL字符串函数

SQL还允许在字符串上有多种函数,例如

  • 串联(使用”“)、
  • 提取子串、
  • 计算字符串长度、
  • 大小写转换(用upper(s)将字符串s转换为大写,或用lower(s)将字符串s转换为小写)、
  • 去掉字符串后面的空格(使用trim(s)),

不同数据库系统所提供的字符串函数集是不同的,请参阅你的数据库系统手册来获得它所支持的实际字符串函数的详细信息.

like操作符对字符串进行模式匹配

在字符串上可以使用like操作符来实现模式匹配。我们使用两个特殊的字符来描述模式

  1. 百分号(%):匹配任意子串。也就是0个或者0个以上的字符.
  2. 下划线(_):匹配任意一个字符。

模式是大小写敏感的,也就是说,大写字符与小写字符不匹配,反之亦然。为了说明模式匹配,考虑下列例子:

  • 'Intro%'匹配任何以"lnro"打头的字符串
  • %Comp%匹配任何包含"Comp"子串的字符串,例如'Intro. to Computer Science''Computational Biology'
  • '___'匹配只含三个字符的字符串。
  • '___%'匹配至少含三个字符的字符串。
1
2
3
4
5
6
7
8
9
mysql> select title from course where title like 'Intro%';
+----------------------------+
| title |
+----------------------------+
| Intro. to Biology |
| Intro. to Computer Science |
| Intro. to Digital Systems |
+----------------------------+
3 rows in set
1
2
3
4
5
6
7
8
mysql> select title from course where title like "%Comp%";
+----------------------------+
| title |
+----------------------------+
| Computational Biology |
| Intro. to Computer Science |
+----------------------------+
2 rows in set

SQL查询: 找出所在建筑名称中包含子串'Watson'的所有系名

1
2
3
select dept_name
from department
where building like '%Watson%';
1
2
3
4
5
6
7
8
9
10
mysql> select dept_name
from department
where building like '%Watson%';
+-----------+
| dept_name |
+-----------+
| Biology |
| Physics |
+-----------+
2 rows in set

转义字符

为使模式中能够包含特殊模式的字符(即%_),SQL允许定义转义字符。转义字符直接放在特殊字符的前面,表示该特殊字符被当成普通字符。

定义转义字符

我们在like比较运算中使用escape关键词来定义转义字符。为了说明这一用法,考虑以下模式,它使用反斜线(\)作为转义字符:

  • like 'ab\%cd%' escape '\':匹配所有以”ab%cd“开头的字符串。
  • like 'ab\\cd%' escape '\':匹配所有以”ab\cd“开头的字符串。

搜寻不配配 not like

SQL允许使用not like比较运算符搜寻不匹配项。一些数据库还提供like运算的变体,不区分大小写.

SQL:1999提供的similar to进行匹配

SQL:1999中还提供similar to操作,它具备比like运算更强大的模式匹配能力。它的模式定义语法类似于Unix中的正则表达式。