为什么不能在 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
个值不是数字但包含 个字母 (例如,值为 2A
或 CT
的部门),那么您可能会遇到问题。
例如:
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>
例如,我想搜索部门 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
个值不是数字但包含 个字母 (例如,值为 2A
或 CT
的部门),那么您可能会遇到问题。
例如:
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>