为什么不能在 table 中的数值上使用“'”?

Why can't you use " ' " on a numeric value in a table?

例如,我想搜索部门 20 中的所有员工。为什么我必须列出第一个与第二个。 '是否只适用于文字数据?

Select * from emp 
Where dept = 20 

对比

Select * from emp
Where dept = '20' 

关于数据类型。

  • 如果 dept 列的数据类型是 NUMBER,您将使用 where dept = 20
  • 如果它是一个字符串(CHAR 数据类型之一;VARCHAR2 是最常见的),那么您会将值括在单引号中:where dept = '20'

Oracle 将尝试(有时会成功)将一种数据类型隐式转换为另一种数据类型。因此,如果 dept 列是 varchar2 并且您使用 where dept = 20,它 可能 有效。但是,如果 dept 个值不是数字但包含 个字母 (例如,值为 2ACT 的部门),那么您可能会遇到问题。

例如:

SQL> create table temp (dept varchar2(2));

Table created.

由于将 20 隐式转换为字符串,因此插入有效:

SQL> insert into temp values (20);

1 row created.

Select 也有效:

SQL> select * from temp where dept = 20;

DE
--
20

尽管如此,您应该如何使用它:

SQL> select * from temp where dept = '20';

DE
--
20

但是,如果不是 table 中的所有值都是 numerics(尽管存储在 varchar2 数据类型列中)...

SQL> insert into temp values ('2A');

1 row created.

... 那么隐式转换将不再起作用:

SQL> select * from temp where dept = 20;
ERROR:
ORA-01722: invalid number



no rows selected

将值括在单引号中是可行的方法:

SQL> select * from temp where dept = '20';

DE
--
20

SQL>