根据定义,XML元素和属性的值是区分大小写的。例如,如果搜索值为“Paris” 的 <CITY>元素,那么不会找到“PARIS”或“paris”。可以使用fn:upper-case()等XQuery函数解决这个问题,但是使用这些函数时不能使用XML索引,所以性能可能不好。本文解释如何使用DB2 pureXML 创建不区分大小写的数据库以及让XML查询和XML索引发挥预期的作用。用大写和小写函数执行不区分大小写的搜索。
下面的示例帮助您更清楚地理解不区分大小写的搜索。清单1定义一个包含一个INTEGER列和一个XML列的表,并在表中插入7行。每行包含一个小的客户文档,其中包含XML元素 <CITY>。
此元素中的值在大小写方面并不一致。一些值是全大写的,一些是全小写的,其他是大小写混合的(首字母大写)。如果数据来自不同的应用程序,而这些应用程序采用不同的大小写数据输入规则,就会出现这种情况。
清1. 示例表和数据
CREATE TABLE customer (id INTEGER, xmldoc XML); INSERT INTO customer (id, xmldoc) VALUES (1,'<Customer id=”1″><city>PARIS</city></Customer>’), (2,'<Customer id=”2″><city>Tokyo</city></Customer>’), (3,'<Customer id=”3″><city>tokyo</city></Customer>’), (4,'<Customer id=”4″><city>PARIS</city></Customer>’), (5,'<Customer id=”5″><city>paris</city></Customer>’), (6,'<Customer id=”6″><city>Delhi</city></Customer>’), (7,'<Customer id=”7″><city>Paris</city></Customer>’); |
如果一个应用程序查询这些XML文档,寻找某一城市的客户,那么很可能需要不区分大小写的搜索。例如,可能希望找到 Paris 的所有客户,也就是希望获取第 1、4、5 和 7 行。但是,如果搜索值 “Paris”,那么只会返回第 7 行。要想获取所需的所有四行,可以使用 XQuery 函数 fn:upper-case() 把 city 元素值转换为大写并与 “PARIS” 做比较。清单 2 中的查询就采用这种方式,它会返回 Paris 的所有四个客户。
清单2. 选择 Paris的客户
SELECT id, XMLCAST( XMLQUERY(‘$XMLDOC/Customer/city’) AS VARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS(‘$XMLDOC/Customer[fn:upper-case(city) = “PARIS”]’); |
如果查询通过一个参数标志提供搜索值,那么这个参数也应该转换为大写,见 清单3。这个参数标志(“?”)的类型为 VARCHAR(15)并作为变量“c” 传递给XQuery谓词。
清单3. 使用参数标志选择客户
SELECT id, XMLCAST( XMLQUERY(‘$XMLDOC/Customer/city’) AS VARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS(‘$XMLDOC/Customer[fn:upper-case(city) = fn:upper-case($c)]’PASSING CAST(? AS VARCHAR(15)) AS “c”); |
图1显示以上示例查询的输出。
图 1. 示例查询的结果
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
数据库产品巡礼:IBM DB2概览
IBM DB2关系型数据库管理系统提供了支持多平台系统的关键技术,它具备较高的可用性和良好的性能。
-
如何进行分布式大数据应用调优
分布式环境通常是与数据库服务器相分离的。而DBA的工作就是监视这些环境并配置和优化数据库服务器以满足多种需求。大数据的出现加剧了DBA的问题。
-
IBM DB2将迎来30岁“生日”
再过几天,主流数据库产品DB2就将迎来它30岁的“生日”。作为关系型数据库技术的标志性产品,DB2在过去的30年中也在伴随用户需求的变化不断地发展。
-
SQL调优之“忧”:如何进行SQL调优
DBA们应该将自己从“我要对什么调优?”的老路上解放出来,而在指标、配置和成本方面花费一定的时间。