分享

locate和posstr

 昵称10443322 2012-12-25
先说一下两个函数的用法
locate(arg1,arg2,<pos>)
   查找arg2中第一次出现arg1的位置,指定pos,则从arg2的pos处开始找arg1第一次出现的位置。
posstr(arg1,arg2)查看arg2在arg1中的位置

SELECT POSSTR('MYTEST-100',('TEST-'||A.COL_VC)) FROM T_TEST_ZRK A; //error

SELECT POSSTR('MYTEST-100',('TEST-' )) FROM T_TEST_ZRK A;//success

SELECT POSSTR('MYTEST-100',a.COL_VC) FROM T_TEST_ZRK A;//error

SELECT POSSTR(A.COL_VC,'2') FROM T_TEST_ZRK A;//success

select locate(('TEST-'||A.COL_VC),'MYTEST-100'),a.col_vc FROM T_TEST_ZRK A;//success

select locate(('好-'||A.COL_VC),'你好-'||a.col_vc),a.col_vc FROM T_TEST_ZRK A;//success
从上面几个语句,很容易看出来。
posstr中arg2是只能是固定的str,不能使用字段代替,arg1就可以动态生成
locate中arg1和arg2都可以动态生成。
现在有t_user和t_branch表
user中userid为branch_no||'0001'依次递加
branch中又有parent_branch
这个时候如果要查某branch辖内所有用户信息
最开始我想的是
select a.* from t_user a,t_branch b
where a.userid like '%'||b.branch_no||'%'
   and b.parent_branch = '000000';
执行后发现,这个语句是错误的。
然后找到locate,找到posstr
locate语句:
select a.* from t_user a ,t_branch b
where locate(b.branch_no,a.userid)>0 and b.parent_branch = '000000';//success
posstr语句:
select a.* from t_user a ,t_branch b
where posstr(a.userid,b.branch_no)>0  and b.parent_branch = '000000';//error

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多