在oracle sqlplus中选择以'n'结尾的单词
Selecting words that end in 'n' in oracle sqlplus
Select table 位老师的名字和姓氏,其中名字以 'n' 结尾。
我写道:
select first_name, last_name
from teachers
where type='teacher'
and last_name like '%n';
很遗憾,select没有行。它应该 select 至少两个。
问题出在“last_name like '%n'”,我找不到解决方案。有谁知道我该如何解决这个问题?Screenshot
尝试使用。这将消除遗漏区分大小写数据的可能性。
select first_name, last_name from teachers where lower(type)='teacher' and lower(first_name ) like '%n';
如您所知,您的查询应该有效。问题可能是微不足道的(大小写重要吗?这些名字中真的有小写字母 "n" 吗?)。
同时,有几个选项供您选择:
SQL> select ename from emp
2 where ename like '%N';
ENAME
----------
ALLEN
MARTIN
SQL> select ename from emp
2 where substr(ename, -1) = 'N';
ENAME
----------
ALLEN
MARTIN
SQL> select ename from emp
2 where regexp_like(ename, 'N$');
ENAME
----------
ALLEN
MARTIN
SQL>
[编辑:CHAR 数据类型问题]
SQL> create table empc (ename char(10));
Table created.
SQL> insert into empc select ename from emp;
12 rows created.
SQL> select ename from empc where ename like '%N';
no rows selected
SQL> select ename from empc where trim(ename) like '%N';
ENAME
----------
ALLEN
MARTIN
SQL>
根据屏幕截图,first_name、last_name 列的数据类型为 CHAR。
关于 CHAR 的事情是附加空格以达到其全长。
示例:对于 first_name CHAR(10),如果您存储 'Andra',它将存储为 'Andra '
所以使用trim函数:
select first_name, last_name
from teachers
where type='teacher'
and trim(first_name) like '%n';
或者使用 VARCHAR2 数据类型代替 CHAR。
它不会在末尾附加空格以达到其全长。
事实是,在您的示例中没有 first_name
列以 n
结尾。是的。
为什么? first_name
的列类型是 CHAR
而不是 VARCHAR2
,因此当每个名字少于 10 个字符时,Oracle 会用空格填充该列。
解决方案?
使用 VARCHAR2
而不是 CHAR
,如:
create table teacher (
last_name varchar2(10), -- VARCHAR2 now!
first_name varchar2(10), -- VARCHAR2 now!
type varchar2(10)
);
使用此结构,您的查询将 运行 很好。
或者,如果您不想更改 table 结构,您可以 TRIM()
该列,如:
select first_name, last_name
from teachers
where type='teacher'
and trim(first_name) like '%n'; -- use TRIM here!
如果您有 char 数据类型,那么您应该尝试从 first_name 值
中修剪 space 个字符
select first_name, last_name
from teachers
where type='teacher'
and trim(first_name) like '%n';
无论如何,在您的屏幕截图中,您还没有用 firt_name 结束 n
..try
select first_name, last_name
from teachers
where trim(first_name) like '%n';
你可以尝试类似
SELECT *
FROM teachers a
WHERE TRIM (LOWER (a.first_name)) LIKE '%n';
Select table 位老师的名字和姓氏,其中名字以 'n' 结尾。
我写道:
select first_name, last_name
from teachers
where type='teacher'
and last_name like '%n';
很遗憾,select没有行。它应该 select 至少两个。
问题出在“last_name like '%n'”,我找不到解决方案。有谁知道我该如何解决这个问题?Screenshot
尝试使用。这将消除遗漏区分大小写数据的可能性。
select first_name, last_name from teachers where lower(type)='teacher' and lower(first_name ) like '%n';
如您所知,您的查询应该有效。问题可能是微不足道的(大小写重要吗?这些名字中真的有小写字母 "n" 吗?)。
同时,有几个选项供您选择:
SQL> select ename from emp
2 where ename like '%N';
ENAME
----------
ALLEN
MARTIN
SQL> select ename from emp
2 where substr(ename, -1) = 'N';
ENAME
----------
ALLEN
MARTIN
SQL> select ename from emp
2 where regexp_like(ename, 'N$');
ENAME
----------
ALLEN
MARTIN
SQL>
[编辑:CHAR 数据类型问题]
SQL> create table empc (ename char(10));
Table created.
SQL> insert into empc select ename from emp;
12 rows created.
SQL> select ename from empc where ename like '%N';
no rows selected
SQL> select ename from empc where trim(ename) like '%N';
ENAME
----------
ALLEN
MARTIN
SQL>
根据屏幕截图,first_name、last_name 列的数据类型为 CHAR。 关于 CHAR 的事情是附加空格以达到其全长。 示例:对于 first_name CHAR(10),如果您存储 'Andra',它将存储为 'Andra '
所以使用trim函数:
select first_name, last_name
from teachers
where type='teacher'
and trim(first_name) like '%n';
或者使用 VARCHAR2 数据类型代替 CHAR。 它不会在末尾附加空格以达到其全长。
事实是,在您的示例中没有 first_name
列以 n
结尾。是的。
为什么? first_name
的列类型是 CHAR
而不是 VARCHAR2
,因此当每个名字少于 10 个字符时,Oracle 会用空格填充该列。
解决方案?
使用
VARCHAR2
而不是CHAR
,如:create table teacher ( last_name varchar2(10), -- VARCHAR2 now! first_name varchar2(10), -- VARCHAR2 now! type varchar2(10) );
使用此结构,您的查询将 运行 很好。
或者,如果您不想更改 table 结构,您可以
TRIM()
该列,如:select first_name, last_name from teachers where type='teacher' and trim(first_name) like '%n'; -- use TRIM here!
如果您有 char 数据类型,那么您应该尝试从 first_name 值
中修剪 space 个字符select first_name, last_name
from teachers
where type='teacher'
and trim(first_name) like '%n';
无论如何,在您的屏幕截图中,您还没有用 firt_name 结束 n
..try
select first_name, last_name
from teachers
where trim(first_name) like '%n';
你可以尝试类似
SELECT *
FROM teachers a
WHERE TRIM (LOWER (a.first_name)) LIKE '%n';