SQL 检查字符串中的最后一个字母/又名奇怪的行为
SQL checking the last letter in string / AKA LIKE strange behaviour
我知道已经有人回答了,但它对我不起作用。
这么快介绍一下:
我有 table 呼叫 swimmers
。我将向其中插入满足所有列的新记录:
INSERT INTO swimmers(id, first_name, last_name, age, gender)
VALUES(9,'Maria','Spolsky',34,'Female');
现在我想在 swimmers
table 中查找 first_name
不 以字母 a
结尾的记录以及在哪里性别是 Female
所以我写了SQL查询:
SELECT first_name, last_name
FROM swimmers
WHERE first_name NOT LIKE '%a' AND gender = 'Female'
但它确实 return Maria
我们刚刚添加的。基本上 return 每个女性
我正在使用 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 LIKE
更改为 WHERE first_name LIKE '%a'
return 没有行。我认为问题在于数据类型和空 spaces 从 first_name 的末尾到字符串保留 space 的末尾(名称有 ~10 个字符,我使用 `varchar2(20 ))
显然 oracles 在名称后面添加了空格,这就是 '%a' 不起作用的原因,要么将您的列定义更改为 varchar(这样 oracle 就不会添加额外的空格)或 trim你名字中的空格是这样的:
SELECT first_name, last_name
FROM swimmers
WHERE NOT trim(first_name) LIKE '%a' AND gender = 'Female';
我知道已经有人回答了,但它对我不起作用。
这么快介绍一下:
我有 table 呼叫 swimmers
。我将向其中插入满足所有列的新记录:
INSERT INTO swimmers(id, first_name, last_name, age, gender)
VALUES(9,'Maria','Spolsky',34,'Female');
现在我想在 swimmers
table 中查找 first_name
不 以字母 a
结尾的记录以及在哪里性别是 Female
所以我写了SQL查询:
SELECT first_name, last_name
FROM swimmers
WHERE first_name NOT LIKE '%a' AND gender = 'Female'
但它确实 return Maria
我们刚刚添加的。基本上 return 每个女性
我正在使用 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 LIKE
更改为 WHERE first_name LIKE '%a'
return 没有行。我认为问题在于数据类型和空 spaces 从 first_name 的末尾到字符串保留 space 的末尾(名称有 ~10 个字符,我使用 `varchar2(20 ))
显然 oracles 在名称后面添加了空格,这就是 '%a' 不起作用的原因,要么将您的列定义更改为 varchar(这样 oracle 就不会添加额外的空格)或 trim你名字中的空格是这样的:
SELECT first_name, last_name
FROM swimmers
WHERE NOT trim(first_name) LIKE '%a' AND gender = 'Female';