在SQL查询中%%%的含义?

Yon*_*oni 4 sql

我熟悉这种查询:

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运算符.

Rob*_*and 6

原来它在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)


Ada*_*Dev 5

如果要查找包含百分比的任何值,则需要使用ESCAPE:

例如

SELECT * 
FROM SomeTable
WHERE foo LIKE '%|%%' ESCAPE '|'
Run Code Online (Sandbox Code Playgroud)

如果foo是数字(在数据类型中),那么如果您尝试将列中的数字值与字符串进行比较,则会收到错误消息。