📄 解析 sql 中的字符串.htm
字号:
SELECT * FROM strings;
ID STR
----------- -------------------------------------------------
1 abc, def, ghi, 123
2 123,456789,abc,123
3 a,b,c,a,b,c,a
4 string
4 record(s) selected.
</PRE>
<P>用<A
href="http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0303stolze/0303stolze1.shtml#listing3">清单
3</A> 所显示的查询可以对字符串中有多少个不同元素进行计数。使用函数 <CODE>RTRIM()</CODE> 和
<CODE>LTRIM()</CODE>
除去任何前导空格或结尾空格,如果完全根据空白,则这两种空格可能会使两个元素一模一样。第一个查询使用了包含四个元素的字符串,其中两个元素完全一样。换句话说,存在三个截然不同的元素。<A
href="http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0303stolze/0303stolze1.shtml#listing7">清单
7</A> 中的第二个查询显示了对表字符串进行相同查询后的结果。</P>
<P class=caption><A name=listing7>清单 7. 对字符串中不同元素进行计数</A></P><PRE class=code>SELECT COUNT(DISTINCT VARCHAR(RTRIM(LTRIM(elem)), 1000))
FROM TABLE ( elements('abc, def,abc ,ghi') ) AS x(elem);
1
-----------
3
1 record(s) selected.
SELECT id, COUNT(DISTINCT VARCHAR(RTRIM(LTRIM(elem)), 20))
FROM strings, TABLE ( elements(str) ) AS t(elem)
GROUP BY id;
ID 2
----------- -----------
1 4
2 3
3 3
4 1
4 record(s) selected.
</PRE>
<P>在另一种情况下,您可能希望知道字符串中元素“123”出现的频率。<A
href="http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0303stolze/0303stolze1.shtml#listing8">清单
8</A> 显示了应如何用公式表示这样的查询。</P>
<P class=caption><A name=listing8>清单 8. 对给定字符串的出现次数进行计数</A></P><PRE class=code>SELECT id, ( SELECT COUNT(*)
FROM TABLE ( elements(str) ) AS x(elem)
WHERE VARCHAR(RTRIM(LTRIM(elem)), 100) = '123' )
FROM strings;
ID 2
----------- -----------
1 1
2 2
3 0
4 0
4 record(s) selected.
</PRE>
<P>正如这些查询所显示的,我通常在包含要解析字符串的表与表函数 <CODE>elements()</CODE>
之间进行连接操作。由于表函数会与基于两个基表或视图中的列进行的正常连接不同,因此 DB2 处理那些表函数需要更加精心。在连接处理中,DB2
将会做以下事情:</P>
<OL class=standard>
<LI>从名为 strings 的表中取回一行数据
<LI>向表函数 <CODE>elements()</CODE> 给出该行的 STR 值
<LI>现在,将由这个单个输入参数的 elements() 返回的所有行与第 1 步中所取回的行相关联,而不和其它任何行相关联
<LI>回到第 1 步,取回下一行数据,直到处理完所有行 </LI></OL><A id=4 name=4></A>
<P><STRONG class=subhead>结束语</STRONG><BR></P>
<P>本文展示了如何仅用 SQL 构造就可以解析和处理用定界符分隔的几个元素组成的字符串。最后,我们定义了两个函数
<CODE>elemIdx()</CODE> 和
<CODE>elements()</CODE>,这两个函数可以计算定界符在字符串中的位置,以及根据该信息,抽取作为子字符串的实际元素。为了说明结果以及如何将这些函数用于更复杂的
SQL 语句,还提供了几个示例。</P><A id=5 name=5></A>
<P><STRONG class=subhead>参考资料</STRONG><BR></P>
<UL class=standard>
<LI><A
href="http://www-3.ibm.com/cgi-bin/db2www/data/db2/udb/winos2unix/support/v8pubs.d2w/en_main">DB2
SQL 参考大全</A> </LI></UL><A id=6 name=6></A>
<P><STRONG class=subhead>免责声明</STRONG><BR></P>
<P>本文包含样本代码。IBM
授予您(“被许可方”)非独占和无需专利费的许可证来使用该样本代码。然而,该样本代码以“按现状”来提供,不带任何形式的(无论明示的,还是暗示的)保证,包括对适销性、适用于某特定用途或非侵权性的默示保证。IBM
和它的许可证颁发者不负责被许可方因使用该软件而遭受到的任何损失。IBM
或它的许可证颁发者决不负责任何由于使用软件或无法使用软件所造成的收入以及利润或数据损失,也不负责任何因此而造成的直接的、间接的、特殊的、相因而生的、偶尔的或惩罚性损坏,无论这种损坏是如何造成的,也不管理论上责任该是怎样的,即使
IBM 已经得到可能造成这种损坏的警告,IBM 也不承担责任。</P><!-- Sections ends -->
<P class=standard><A
href="http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0303stolze/0303stolze1.shtml#top">到页首</A></P><!--
<a name="resources">
<p><strong class="subhead">Resources</strong></p>
<ul>
<li><b>Subgroup of resources</b><br/>Explanation of what the resources will provide for the developer. and then list the resources:</li>
<ul>
<li><a href="[include url of resource]">Title of resource</a></li>
<li><a href="[include url of resource]">Title of resource</a></li>
</ul>
</ul>
--><A name=authorname>
<P><STRONG class=subhead>关于作者</STRONG></P><!-- about author begin-->
<TABLE border=0 cellPadding=0 cellSpacing=0>
<TBODY>
<TR><!-- if provided, put author picture here otherwise, comment out the following table cell --><!-- picture size should be approximately 120x150 -->
<TD class=standard><IMG align=left alt="照片:Knut Stolze" height=126
hspace=10 src="解析 SQL 中的字符串.files/stolze.jpg" width=93> </TD>
<TD class=standard>在 <B>Knut Stolze</B> 作为硅谷实验室(他在那里从事 DB2 Image
Extender)的访问学者加入到 IBM 时,就开始从事 DB2 的研究。之后,他转向了 DB2 Spatial Extender
V8,负责改善 Extender 的实用性、性能以及与标准的一致性达两年多。
<P>目前,他作为德国耶拿大学的助教,在联合数据库领域继续为 IBM 工作。可以通过新闻组 comp.databases.ibm-db2
和 ibm.software.db2.udb.spatial 或 <A
href="mailto:stolze@de.ibm.com">stolze@de.ibm.com</A> 与他联系。</P></TD>
<TR>
<TD> </TD></TR></TR></TBODY></TABLE><!-- about author end-->
<TABLE border=1 cellPadding=3 cellSpacing=1>
<TBODY>
<TR>
<TD><FONT face=helvetica,helv,arial size=-1>
<P class=tm>IBM、DB2 和 DB2 Universal Database 是 IBM
公司在美国和/或其它国家或地区的商标或注册商标。</P>
<P class=tm>Windows 是 Microsoft Corporation 在美国和/或其它国家或地区的注册商标。 </P>
<P class=tm>UNIX 是 The Open Group 在美国和/或其它国家或地区的注册商标。</P>
<P class=tm>其它公司、产品和服务名称可能是其它公司的商标或服务标记。</P>
<P class=tm><A href="http://www.ibm.com/legal/copytrade.phtml">IBM
版权和商标信息</A></P></FONT></TD></TR></TBODY></TABLE><!-- End paper --><BR></A></TD>
<TD vAlign=top width=8><IMG height=1
src="C:\Documents and Settings\hjh1\桌面\db2 语法参考\解析 SQL 中的字符串.files\c(1).gif"
width=8> </TD></TR>
<TR height=8 vAlign=top>
<TD vAlign=top width=8></TD>
<TD vAlign=top width=8></TD>
<TD vAlign=top width=8></TD></TR>
<TR height=8 vAlign=top>
<TD vAlign=top width=8><!-- gutter --></TD>
<TD vAlign=top width=8><!-- comments #7: rate article form -->
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD bgColor=#000000 height=3 width="100%"><IMG alt="" border=0
height=1
src="C:\Documents and Settings\hjh1\桌面\db2 语法参考\解析 SQL 中的字符串.files\c(1).gif"
width=150></TD></TR>
<TR vAlign=top>
<TD>
<FORM
action=/developerWorks/cn/wsddratings.nsf/RateArticle?CreateDocument
method=post><!-- comments #7: paste title here --><INPUT
name=ArticleTitle type=hidden value="解析 SQL 中的字符串"> <!-- comments #7: for db2dd, zone=db2dd DON"T CHANGE --><INPUT
name=Zone type=hidden value=DMDD> <INPUT name=region type=hidden
value="simplified chinese"> <INPUT name=RedirectURL type=hidden
value=/developerWorks/cn/dmdd/thankyou/feedback-dmdd.html>
<P><FONT face=helvetica,helv,arial
size=-1><B>您对这篇文章的看法如何?</B></FONT></P>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=570>
<TBODY>
<TR vAlign=top>
<TD><INPUT name=Rating type=radio value=5><FONT
face=helvetica,helv,arial size=-1>真棒!</FONT></TD>
<TD><INPUT name=Rating type=radio value=4><FONT
face=helvetica,helv,arial size=-1>好文章</FONT></TD>
<TD><INPUT name=Rating type=radio value=3><FONT
face=helvetica,helv,arial size=-1>一般;尚可</FONT></TD>
<TD><INPUT name=Rating type=radio value=2><FONT
face=helvetica,helv,arial size=-1>需提高</FONT></TD>
<TD><INPUT name=Rating type=radio value=1><FONT
face=helvetica,helv,arial size=-1>太差!
</FONT></TD></TR></TBODY></TABLE><BR><FONT face=helvetica,helv,arial
size=-1><B>意见?</B></FONT><BR><TEXTAREA cols=52 name=Comments rows=3 wrap=virtual></TEXTAREA>
<BR><BR><INPUT type=submit value=提交反馈意见> </FORM></TD></TR></TBODY></TABLE><!-- end rate article form --></TD>
<TD vAlign=top width=8></TD></TR>
<TR height=8 vAlign=top>
<TD vAlign=top width=8></TD>
<TD vAlign=top width=8></TD>
<TD vAlign=top width=8></TD></TR></TBODY></TABLE><!-- end content --><!-- FOOTER --><!-- need to modify links to appropriate Chinese pages -->
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD><IMG alt="" height=1 src="解析 SQL 中的字符串.files/c.gif" width=1></TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/index.shtml&origin=dm">关于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dm">隐私条约</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dm">法律条款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dm">联系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 src="解析 SQL 中的字符串.files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG alt="" border=0 height=1
src="C:\Documents and Settings\hjh1\桌面\db2 语法参考\解析 SQL 中的字符串.files\c(2).gif"
width=1></NOSCRIPT> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -