小谈LIKE中的ESCAPE
来源:互联网 发布:ubuntu创建一个文件夹 编辑:程序博客网 时间:2024/06/14 10:21
今天考了四级数据库工程师,加上最近复习SQL,所以赶紧记录下来一些考点也是必备的SQL只是。
以MYSQL为例,MYSQL里的SQL语句与四级数据库里要求的SQL SERVER 2000的SQL语句虽同属T-SQL,但略有不同。
表:dage
CREATE TABLE IF NOT EXISTS `dage` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
测试数据:
INSERT INTO `dage` (`id`, `name`) VALUES(2, '铜锣湾'),(3, '铜锣_湾1'),(4, '铜锣_湾2'),(5, '铜锣_湾%2'),(6, '铜锣_湾%_%2');
现在要查找前两位是“铜锣”的字符串,这样的SQL语句太简单了,只要加个LIKE就行了,但往往实际应用的时候肯定不会这么简单。
mysql> SELECT * -> FROM `dage` -> WHERE name LIKE '铜锣%' -> LIMIT 0 , 30 -> ;+----+-------------+| id | name |+----+-------------+| 2 | 铜锣湾 || 3 | 铜锣_湾1 || 4 | 铜锣_湾2 || 5 | 铜锣_湾%2 || 6 | 铜锣_湾%_%2 |+----+-------------+5 rows in set (0.06 sec)
那如果我要前三位是“铜锣_”,按上面的方法看看能不能用。
mysql> SELECT * -> FROM `dage` -> WHERE name LIKE '铜锣_' -> LIMIT 0,30;+----+--------+| id | name |+----+--------+| 2 | 铜锣湾 |+----+--------+1 row in set (0.00 sec)
从上面的结果看,_和%是SQL里的通配符,所以,被系统默认得拿去通配了。上面的SQL意思是:取前两个字符为“铜锣”,第三个任意,共取三个字符。
要如何才能取到前三个字符是:“铜锣_”的数据呢。用ESCAPE 转译!网上说ESCAPE 是将要转译的东西转译成字符,我看了半天没明白,自己动手试,才懂,通俗的讲:ESCAPE 可以转译任何字符(MYSQL里\不让转译,不知为何?),但它只作用于最靠近它的右边的那个字符,而且只能作用一个字符!
看看例子:
mysql> SELECT * -> FROM `dage` -> WHERE name LIKE '铜锣%/%2' -> ESCAPE '/' -> LIMIT 0 , 30;+----+-------------+| id | name |+----+-------------+| 5 | 铜锣_湾%2 || 6 | 铜锣_湾%_%2 |+----+-------------+2 rows in set (0.00 sec)
很复杂吧啊,中间竟然有三个通配符。/%2 转译了百分号%,让它不成为通配符,而只是个普通的字符串,所以上面的SQL意思是:只匹配前面两个字为:“铜锣”,最后两个字为:“%2”的所有数据。
这样也看不出来它只能转译一个最靠近它的右边的通配符啊。看下面:
mysql> SELECT * -> FROM `dage` -> WHERE name LIKE '铜锣%/_%2' -> ESCAPE '/' -> LIMIT 0 , 30 -> ;+----+-------------+| id | name |+----+-------------+| 4 | 铜锣_湾2 || 5 | 铜锣_湾%2 || 6 | 铜锣_湾%_%2 |+----+-------------+3 rows in set (0.00 sec)看到什么了?上面的SQL意思是:前两位为:“铜锣”,最后一位是2,倒数第三位是_,倒数第二位是任意。其实也不能算是倒数第二位,它可以匹配任意多位。
- 小谈LIKE中的ESCAPE
- MySql的like语句中的通配符:百分号、下划线和escape
- sql like语句中的通配符:百分号、下划线和escape
- MySql的like语句中的通配符:百分号、下划线和escape
- sql like语句中的通配符:百分号、下划线和escape
- MySql的like语句中的通配符:百分号、下划线和escape
- DB2 LIKE escape-expression
- Oracle LIKE ESCAPE子句
- sql like 通配符 % _ escape
- SQL Like 通配符特殊用法:Escape
- SQL Server like escape的使用方法
- ORACLE like 下划线 模糊查询 escape
- SQL Server like escape的使用方法
- JavaScript中的escape() 函数
- JS中的escape方法
- JavaScript 中的escape
- SQL 中的escape
- where content like '/_,/_,/_,/_,%' escape '/';
- VC/MFC ComboBox控件使用
- 《c语言深度剖析》笔记
- socket编程
- C指针(一) - 申请和释放内存
- deque成员函数的解析
- 小谈LIKE中的ESCAPE
- 数据结构(二)——栈及实现、括号匹配
- 推荐一个不错的高权重链接交换平台,一秒钟即可被收录
- android ethernet移植- freescale i.mx23平台上移植android2.2-froyo
- 二维数组的动态分配及参数传递
- 限制同一时间只能一个用户登录
- oracle 死锁问题
- vb.net 获取汉字首字母的办法
- rpm dpkg 用法比较