PL/SQL连接oracle的like语句

长安聊IP商业 2010-01-20 03:44:08
大家好, 我最近有一个问题,请各位解答一个, 谢谢!


A,select * from ab01 t where t.aab001 like '11%' or t.aab001 like 'b11%'


B,select * from ab01 t where t.aab001 like 表达式如何写

我要达到的结果是, B语句要只用一个like,用表达式达到A要查到的结果.



...全文
413 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocao_2005 2010-01-26
  • 打赏
  • 举报
回复
首选还是正则表达式,其他人的很多提议都可以实现,下面是我的提供的另一个选择:
select * from ab01 t where decode(substr(t.aab001, 1, 3), 'b11', '11', substr(t.aab001, 1, 2)) = '11';
pobaby 2010-01-22
  • 打赏
  • 举报
回复
不是10G 就不能用正则了,看看这个行不?笨了点,但能达到你的效果。

SELECT *
FROM AB01 T
WHERE SUBSTR(T.AAB001, 1, 3) LIKE '%11%'
AND SUBSTR(T.AAB001, 1, 1) IN ('b', '1')



[Quote=引用楼主 janetdn 的回复:]
大家好, 我最近有一个问题,请各位解答一个, 谢谢!


A,select * from ab01 t where t.aab001 like '11%' or t.aab001 like 'b11%'


B,select * from ab01 t where t.aab001 like  表达式如何写

我要达到的结果是, B语句要只用一个like,用表达式达到A要查到的结果.

                       


[/Quote]
huangyunzeng2008 2010-01-22
  • 打赏
  • 举报
回复
就用正则表达式吧!不过10G以上版本才能用啊 !
lavemx 2010-01-22
  • 打赏
  • 举报
回复
zhege这个。。等等再看吧
lvxiao715 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hackersun12345 的回复:]
t.aab001 like '11%' or t.aab001 like 'b11%'
t.aab001 like 'b11%' 是 t.aab001 like '11%'的子集,两者或起来就是取最大集,等价于t.aab001 like '11%'。

所以B:select * from ab01 t where t.aab001 like '11%'
OVER!!!
[/Quote]
晕,彻底无语,是11打头的好伐
楼主用正则吧
hackersun12345 2010-01-22
  • 打赏
  • 举报
回复
t.aab001 like '11%' or t.aab001 like 'b11%'
t.aab001 like 'b11%' 是 t.aab001 like '11%'的子集,两者或起来就是取最大集,等价于t.aab001 like '11%'。

所以B:select * from ab01 t where t.aab001 like '11%'
OVER!!!
Blaider 2010-01-22
  • 打赏
  • 举报
回复
学习了,今天学regexp_like(a,'^[b]?11') 了
wildoracle 2010-01-22
  • 打赏
  • 举报
回复
想了想,前面提到的两个不对,现在试下。有待学习提高阿

with ab01 as (select 'b111a' aab001 from dual
union
select '1b1' from dual
union
select '11aa' from dual
union
select '11b' from dual)
select *
from ab01 t
where replace(substr(aab001, 1, 1), 'b')||substr(aab001,2,2) like '11%'
wildoracle 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wildoracle 的回复:]
select *
  from ab01 t
where 'b' || replace(substr(aab001, 1, 3), 'b') like 'b11%'

你看下这样行么,数据多可能会有性能问题
[/Quote]

我就郁闷了这样不能达到效果?

with ab01 as (select 'b1111a' aab001 from dual
union
select '111a' from dual
union
select '1a1b' from dual)
select *
from ab01 t
where 'b' || replace(substr(aab001, 1, 3), 'b') like 'b11%'
wildoracle 2010-01-21
  • 打赏
  • 举报
回复
select *
from ab01 t
where 'b' || replace(substr(aab001, 1, 3), 'b') like 'b11%'

你看下这样行么,数据多可能会有性能问题
wuyisky84 2010-01-20
  • 打赏
  • 举报
回复

select * from ab01 where regexp_like(a,'^[b]?11')
长安聊IP商业 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyisky84 的回复:]
select * from ab01 where regexp_like(a,'[b]?11')
[/Quote]

您好,我现在是多查了一些数据.

我要的表达式是:可能b存在,可能b不存在, 但一定要找到以11开头或b11开头的数据
ojuju10 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyisky84 的回复:]
select * from ab01 where regexp_like(a,'[b]?11')
[/Quote]

只能用正则,不能用like,3楼正解
wuyisky84 2010-01-20
  • 打赏
  • 举报
回复
select * from ab01 where regexp_like(a,'[b]?11')
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
正则吗?用like不知道。
fuyou001 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 janetdn 的回复:]
大家好, 我最近有一个问题,请各位解答一个, 谢谢!


A,select * from ab01 t where t.aab001 like '11%' or t.aab001 like 'b11%'


B,select * from ab01 t where t.aab001 like  表达式如何写

我要达到的结果是, B语句要只用一个like,用表达式达到A要查到的结果.

                       


[/Quote]楼主用正则吧
不过要10g才支持

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧