六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 72|回复: 0

DB2的小应用locate和posstr

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-1-25 21:26:34 | 显示全部楼层 |阅读模式
先说一下两个函数的用法
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表