SQL检查字符串中的最后一个字母/ AKA LIKE奇怪的行为

时间:2015-06-16 08:45:59

标签: sql oracle11g isql

我知道它已经得到了回答,但对我来说并不适用。

如此快速地介绍:

我有一个叫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))

1 个答案:

答案 0 :(得分:2)

出乎意料的是,oracles在名称后面添加了空格,这就是为什么'%a'没有工作,要么将列定义更改为varchar(因此oracle不添加额外的空格)或修剪名称之外的空格,如下所示:

std::atomic