table aa
id pid
01 00
02 00
0201 02
0203 02
020101 0201
020102 0201请问如何根据pid过滤id,根据pid 02位把所有id前2位为02的过滤出来,希望ORACLE和mysql版本的都有

解决方案 »

  1.   

    select * from aa where id not like '02%';
      

  2.   

    select * from aa where substr(id,1,2)<>'02'
      

  3.   

    Oracle里有处理子串的function
    好像是SUBSTR, LENGTHMysql里也有处理子串的函数
    好像和Oracle的不一样,你可以在网上查查sql语句类似... where substr(id, 1, LENGTH(pid)) = pid.这是oracle上的方式了,mysql应该有对应的function,至于跨mysql和oracle就要看函数名和参数方式是不是一样了,如果不一样,就自己在一边写同名的function来mapping就可以了。
    ==================================================================
    Inthirties关注Oracle数据库 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    QQ群:  85837884(注明:数据库)
    电子邮件:[email protected]
    网站: http://www.inthirties.com
      

  4.   

    吧以上两个SQL合并就差不多了
      

  5.   

    select * from table aa where pid like '02%';
    这个应该能满足你的需求
      

  6.   


    十分感谢你的方法,如果我要传入多个pid,有没有什么简洁反的方法?试了你给的2个数据库是通用的。
      

  7.   

    "根据pid过滤id, 根据pid 02位把所有id前2位为02的过滤出来"
    这句话好像不是很好理解, 不知道楼主要的是不是这个:select * from aa where pid='02' and substr(id,1,2)='02';

    select * from aa where pid='02' and id like '02%';
      

  8.   

    where substr(id, 1, LENGTH(pid)) = pid and pid in ('02','0021','0101');
      

  9.   

    根据pid 02位 是什么意思?我怎么看不明白
      

  10.   

    你的意思是不是说根据pid的前两位把所有id前2位相等的过滤出来