0

我知道它已经得到了回答,但它对我不起作用。

这么快介绍:

我有桌子叫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个字符

编辑2:

我试图找到数据类型的问题。我char(20)用于first_name.

我将其更改为 varchar2(20):

ALTER TABLE swimmers 
MODIFY first_name varchar2(20);

但没有解决问题

编辑 3:

更改NOT LIKEWHERE first_name LIKE '%a'不返回任何行。我认为问题在于数据类型和从 first_name 末尾到字符串保留空间末尾的空格(名称有大约 10 个字符,我使用 `varchar2(20))

4

1 回答 1

2

显然,oracles 在名称后面添加了空格,这就是为什么 '%a' 不起作用的原因,要么将列定义更改为 varchar(因此 oracle 不会添加额外的空格),要么像这样从你的名字中删除空格:

SELECT first_name, last_name
FROM swimmers
WHERE NOT trim(first_name) LIKE '%a' AND gender = 'Female';
于 2015-06-16T08:58:59.480 回答