日期:2014-05-17  浏览次数:21132 次

sql语句like'%0.%'查询不到数据的问题
表 table
字段 a   varchar2(10),  b number(10,2)
数据库记录:
      a           b
     a1          0.01
     a2          0.02
     a3          1.01
     a4          1.11
     a5          10.01
我想通过sql语句把记录包含"0."的记录给查询出来
下面是我写的sql语句:
select a from table where b like '%0.%';
这样写查询不到数据,where条件修改成"0"或者"."的都可以查询到数据。
想知道为什么“0.”就查询不到数据?是什么特殊字符还是有什么限制?
想查询出正确的结果,应该怎么写?
sql oracle select

------解决方案--------------------
b like...
会先把b转换成字符类型

如图,数据类型转换后,小数点前的0会被去掉,所以你就查不到数据了
如你的SQL 只有10.01会返回
------解决方案--------------------
select b from table where b < 1 or b like '%0.%';
这样能达到你的效果,只是感觉比较笨,呵呵!
------解决方案--------------------

with tab_char as (
select 'a1'as a,0.01 as b from dual
union 
select 'a2',0.02 from dual
union 
select 'a3',1.01 from dual
union 
select 'a4',1.11 from dual
union 
select 'a5',10.01 from dual
)
select * from tab_char t where to_char(t.b,'990.99') like '%0.%';

------解决方案--------------------
select b from table where substr(replace(b,'-',''),instr(b, '.')-1, 1) in ('.','0');

我现在做的数据是这样的:
-1
0.3
10.1
21.1
-0.1

用这个SQL能查出来
0.3
10.1
-0.1

如果还有好的方法,拿出来一起分享啊!