先说一下两个函数的用法 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 |
|
来自: 昵称10443322 > 《db2》