我熟悉这种查询:
select * from tableA where foo like '%bar%'
Run Code Online (Sandbox Code Playgroud)
但今天我在一些遗留代码中遇到了三个相邻的百分号,如下所示:
select * from tableA where foo like '%%%'
Run Code Online (Sandbox Code Playgroud)
当foo是字符串类型(varchar等)时,这个查询似乎在mssql和oracle上都有效,但是当foo是数字时它会失败.
知道这是什么意思吗?
编辑:抱歉原始问题中的拼写错误,查询使用LIKE运算符.
原来它在mysql中匹配everthing:
mysql> create database foo;
Query OK, 1 row affected (0.06 sec)
mysql> use foo;
Database changed
mysql> create table foo ( bar char(20) );
Query OK, 0 rows affected (0.06 sec)
mysql> desc foo;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| bar | char(20) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> insert into foo values ('endwith%');
Query OK, 1 row affected (0.05 sec)
mysql> insert into foo values ('%startwith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into foo values ('cont%ins');
Query OK, 1 row affected (0.00 sec)
mysql> insert into foo values ('doesnotcontain');
Query OK, 1 row affected (0.00 sec)
mysql> select * from foo where bar like '%%%';
+----------------+
| bar |
+----------------+
| endwith% |
| %startwith |
| cont%ins |
| doesnotcontain |
+----------------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
如果要查找包含百分比的任何值,则需要使用ESCAPE:
例如
SELECT *
FROM SomeTable
WHERE foo LIKE '%|%%' ESCAPE '|'
Run Code Online (Sandbox Code Playgroud)
如果foo是数字(在数据类型中),那么如果您尝试将列中的数字值与字符串进行比较,则会收到错误消息。
| 归档时间: |
|
| 查看次数: |
8421 次 |
| 最近记录: |