您的位置:首页 > 其它

如何对37,65535的字段进行中文模糊查询

2008-01-09 14:58 309 查看
在5.2版本中如果使用SQL建表并制定字段属性为CCSID 65535,是可以使用中文的模糊查询的但如果使用DDS建表,利用field level keyword来制定字段属性为CCSID
(65535),则无法使用中文的模糊查询,原因是0E/0F控制码也被当作普通字符使用。

例如
R TEST
--NAME --A(20)-- CCSID(65535)

建立PF文件QGPL/TEST

INSERT INTO QGPL/TEST VALUES('中华人民共和国')

使用QUERY进行模糊查询
SELECT * FROM QGPL/TEST WHERE NAME LIKE '中%‘
系统返回0行纪录

如果要实现对65535字段的模糊查询,必须修改QUERY的写法:
SELECT * FROM QGPL/TEST WHERE HEX(NAME) LIKE SUBST(HEX('中'),1,3)||'%'
返回的结果为
--------中华人民共和国
返回结果正确。

这里充分考虑了在单字节环境下对简体中文的处理过程,即把一个双字节字符(加上0E/0F控制码)当作4个字节来处理,而这些字节包含的数据是无法在单字节环境下正确解析的。所以,必须使用16进制的方式来处理。

如果用户要检索的是“中华“,则检索的条件必须写成:
SELECT * FROM QGPL/TEST WHERE HEX(NAME) LIKE SUBST(HEX('中'),1,5)||'%'

因为0E/0F只出现在双字节字符串的开头和结尾,所以两个汉字需要检索的字符个数是5个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: