我知道它已经得到了回答,但对我来说并不适用。
如此快速地介绍:
我有一个叫swimmers
的表。我将向其中插入新记录,以满足所有列:
INSERT INTO swimmers(id, first_name, last_name, age, gender)
VALUES(9,'Maria','Spolsky',34,'Female');
现在我想查找swimmers
表格中的first_name
不以字母a
结尾且性别为Female
所以我写了SQL查询:
SELECT first_name, last_name
FROM swimmers
WHERE first_name NOT LIKE '%a' AND gender = 'Female'
但它确实会返回我们刚刚添加的Maria
。它基本上归还了每个女性
我正在使用ORACLE iSQL plus。
编辑:
我尝试使用substr(first_name, -1) = 'a'
,但结果是-1为空,因为我使用varchar(20)
且名称通常小于20个字符
EDIT2:
我试图在数据类型中找到问题。我将char(20)
用于first_name
。
我把它改成了varchar2(20):
ALTER TABLE swimmers
MODIFY first_name varchar2(20);
但没有解决问题
编辑3:
将NOT LIKE
更改为WHERE first_name LIKE '%a'
不会返回任何行。我认为问题存在于数据类型和空格中,从first_name的末尾到字符串的保留空间的末尾(名称有~10个字符,我使用`varchar2(20))
答案 0 :(得分:2)
出乎意料的是,oracles在名称后面添加了空格,这就是为什么'%a'没有工作,要么将列定义更改为varchar(因此oracle不添加额外的空格)或修剪名称之外的空格,如下所示:
std::atomic