请教字符串带空格和不带空格的问题

[复制链接]
查看11 | 回复9 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
请教大家,为什么表中的字符串是 '0000011' ,但我用where col = '0000011' 却能查出这条记录,在什么情况下会忽略或者不忽略空格?

回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
你确定能查出吗?
实验一下:
11:57:20 SCOTT@orcl> select empno,ename,length(ename) from emp where rownum insert into emp(empno,ename) values(2012,'g002'); --有空格
已创建 1 行。
已用时间:00: 00: 00.04
11:59:34 SCOTT@orcl> commit;
12:02:20 SCOTT@orcl> select empno,ename,length(ename) from emp where rownum select ename,length(ename) from emp where ename='g002';--没有空格
未选定行
已用时间:00: 00: 00.01
12:00:03 SCOTT@orcl> select ename,length(ename) from emp where ename='g002';--有空格
ENAMELENGTH(ENAME)
---------- -------------
g002
6

回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
什么时候都不会忽略空格,你是如何确定表中的字符串是'0000011'的。如果真是'0000011',你的查询不可能得到这条记录。select dump看看,估计你这个字段是varchar2的
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
这个不应该吧,不可能忽略空格
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
啊,字段是char型的
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
本帖最后由 sniper_bullet 于 2012-12-12 16:36 编辑
select * from odrm where odr_no = 'A3310237
';
在sqldeveloper里也遇到這種情況
我們系統訂單檔:odrm.odr_no char(20)
1.單單執行上面用字面常值做參數的sql查詢,無論'A3310237
'裏面的空格有多少個,都可以查查出。
2.如果將'A3310237
'作為一個形參傳進來就一定匹配20byte,如下
select * from odrm where odr_no =:as_odr_no;
或者過程,匿名塊里:
select * from odrm where odr_no =v_odr_no;
測試結果:如果是字面常值參數,就會自動cast(xxx as char(20))轉換

另外如果select MDD from odrm where mdd = 'PANAMA';
odrm.mdd是varchar2(20)
查詢結果必須要和數據里的數據一樣,無論是字面值參數還是變量,多一個少一個空格都不行。不存在cast轉換
上面是我在sqldeveloper里遇到的,應該和工具沒關係吧,用過程來做測試上面的情況還是會遇到。

回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
highnice 发表于 2012-12-12 13:07
啊,字段是char型的

char型,怎么会忽略呢?不会的
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
sniper_bullet 发表于 2012-12-12 13:18
select * from odrm where odr_no = 'A3310237
';
在sqldeveloper里也遇到這種情況 ...

哦,有点明白了,谢谢
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
我实验了下:
SQL> select * from (
2select cast('00111' as char(6)) a from dual)
3 where a = '00111'
4/

A
------
00111
欢迎大家解释。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
这样也行:
select * from dual where cast('00111' as char(6)) = '00111'
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行