db2 字符分割的使用、locate、substr
(2009-09-11 10:21:05)
标签:
db2字符分割的使用locatesubstrandyny新浪sina杂谈 |
db2 locate()函数详解、
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
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
(
union all
)
select id from t

加载中…