问题描述
您能否向我解释一下我在dba_tables上获得不同输出的原因。
SQL> desc dba_tables
名称为空?类型
-
度VARCHAR2(40)
SQL> 从dba_tables中选择不同程度,其中程度!= 1;
从dba_tables中选择不同程度,其中程度!= 1
*
第1行的错误:
ORA-01722: 无效编号
SQL> 从dba_tables中选择不同程度,其中程度!= '1';
学位
----------------------------------------
1-显示输出,但也显示1-
3
默认
4
2
SQL> 从dba_tables中选择不同程度,其中程度!= '12 ';
学位
----------------------------------------
1
3
默认
4
2
这里还没有显示12。
SQL> 从dba_tables中选择 *,其中度 = 1;
从dba_tables中选择 *,其中度 = 1
*
第1行的错误:
ORA-01722: 无效编号
SQL> 从dba_tables中选择 *,其中degree = '1';
没有选择行
请让我们知道如何使用varchar2数据类型进行数据检索。
SQL> desc dba_tables
名称为空?类型
-
度VARCHAR2(40)
SQL> 从dba_tables中选择不同程度,其中程度!= 1;
从dba_tables中选择不同程度,其中程度!= 1
*
第1行的错误:
ORA-01722: 无效编号
SQL> 从dba_tables中选择不同程度,其中程度!= '1';
学位
----------------------------------------
1-显示输出,但也显示1-
3
默认
4
2
SQL> 从dba_tables中选择不同程度,其中程度!= '12 ';
学位
----------------------------------------
1
3
默认
4
2
这里还没有显示12。
SQL> 从dba_tables中选择 *,其中度 = 1;
从dba_tables中选择 *,其中度 = 1
*
第1行的错误:
ORA-01722: 无效编号
SQL> 从dba_tables中选择 *,其中degree = '1';
没有选择行
请让我们知道如何使用varchar2数据类型进行数据检索。
专家解答
SQL> desc dba_tables Name Null? Type ----------------------------------------------------- -------- ------------------------------------ OWNER NOT NULL VARCHAR2(128) TABLE_NAME NOT NULL VARCHAR2(128) TABLESPACE_NAME VARCHAR2(30) CLUSTER_NAME VARCHAR2(128) IOT_NAME VARCHAR2(128) STATUS VARCHAR2(8) PCT_FREE NUMBER PCT_USED NUMBER INI_TRANS NUMBER MAX_TRANS NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NUMBER MAX_EXTENTS NUMBER PCT_INCREASE NUMBER FREELISTS NUMBER FREELIST_GROUPS NUMBER LOGGING VARCHAR2(3) BACKED_UP VARCHAR2(1) NUM_ROWS NUMBER BLOCKS NUMBER EMPTY_BLOCKS NUMBER AVG_SPACE NUMBER CHAIN_CNT NUMBER AVG_ROW_LEN NUMBER AVG_SPACE_FREELIST_BLOCKS NUMBER NUM_FREELIST_BLOCKS NUMBER DEGREE VARCHAR2(10) ...
您可以看到 “度” 是varchar2列。
所以当你这样做的时候:
其中度 = 1
我们有一个不匹配的数据类型,所以在内部我们做:
其中to_number (度) = 1
让它们对齐。当然,如果我们找到一个无法转换的度值,例如 “默认” 一词,那么我们将轰炸。
我们只需要处理任何领先的空间,
SQL> select count(*) from dba_tables where degree = '1';
COUNT(*)
----------
0
SQL> select count(*) from dba_tables where ltrim(degree) = '1';
COUNT(*)
----------
2735
SQL> select count(*) from dba_tables where degree = lpad('1',10);
COUNT(*)
----------
2735
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




