加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

db2 字符分割的使用、locate、substr

(2009-09-11 10:21:05)
标签:

db2

字符分割的使用

locate

substr

andyny

新浪

sina

杂谈

db2 locate()函数详解、

 

http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0705nair/index.html?S_TACT=105AGX52&S_CMP=tut-cto

 

select length('我你ni') from sysibm.sysdummy1;

db2 中一个汉字 length是3、一个字母是1、


-----------------字符串分割、sql写法、----------------

注意:需要增加一个●(代表空格)结束符

with n(str, ori, pos) as (
values ('AA BB CC DD ', 1, posstr('AA BB CC DD ', ' '))
union all
select str, pos+1, locate(' ', str, pos+1)
from n
where locate(' ', str, pos+1)>0)
select str, ori, pos, substr(str, ori, pos-ori) as result from n;


---------------字符串分割、存储过程写法、--------------

 


-----str为输入字符串、splitchar是分隔符、
CREATE PROCEDURE substrbysplitchar ( in str varchar(254) , in splitchar varchar(4) )
------------------------------------------------------------------------
-- SQL 存储过程
------------------------------------------------------------------------

P1: BEGIN
 -- 声明游标
 declare v_start int;
    declare v_end int;
 declare v_str varchar(254);
 set v_start=1;
 set v_end=locate(splitchar,str);
 while v_end>0 do
     set v_str=substr(str,v_start,v_end-v_start);
  insert into t values(v_str);
  set v_start=v_end+1;
  set v_end=locate(splitchar,str,v_start);
 end while;
 -- 最后一个字符串、
 set v_str=substr(str,v_start);
 insert into t values(v_str);
END P1


------------------------------------------------------

两个select 语句union后怎样用其中的一个字段排序?

ORDER BY 1,2,3...................................


(1,2,3 。。。。。为字段的次序)
 
 
http://www.itpub.net/thread-106859-1-1.html

 

----------------


db2 with递归语句 收藏
WITH RPL (PID, ID, name) AS       
      
SELECT ROOT.PID, ROOT.ID, ROOT.Name       
FROM regr ROOT       
WHERE ROOT.PID = 8  
UNION ALL      
SELECT CHILD.PID, CHILD.ID, CHILD.Name
FROM RPL PARENT, regr CHILD
WHERE PARENT.ID = CHILD.PID
)
SELECT DISTINCT PID, ID, Name       
FROM RPL
ORDER BY PID, ID, Name

让我们研究这个查询的组件:

RPL 作为一个具有以下三列的虚拟表:PID、ID 和 name。


WITH 子句内的第一个 SELECT 语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中,种子是 PID 为 8 的一行或多行。


第二个 SELECT 语句执行多次。将种子作为输入(JOIN 中的辅助表)传递给第二个 SELECT 语句以产生下一个行集合。将 JOIN 的结果添加(UNION ALL)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。


如果期望,虚拟表上最后的 SELECT 允许我们选择递归查询所产生的所有行或仅部分行。


http://blog.csdn.net/cupoy/archive/2008/05/26/2484112.aspx

 

有没有可以描述一下db2递归查询的执行顺序,不理解
就以这个为例
with t(id) as
(
 select 1 as id from sysibm.sysdummy1 a
union all
 select id+1 as id from t,sysibm.sysdummy1 a where id<=98
)
select id from t


 

0

阅读 收藏 喜欢 打印举报/Report
后一篇:过生日
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有