如何对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个。
(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个。
相关文章推荐
- 小猫统计:以视图为基础进行定制查询,查询结果显示中文字段名
- 如何在不带分表字段的情况下通过mycat进行大批量的数据查询
- 如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
- 如何进行ibatis动态多条件组合查询以及模糊查询
- MongoDB查询包含中文的字段进行修改
- Mysql数据库like模糊查询中文字段不准确的临时解决办法
- Mysql数据库like模糊查询中文字段不准确的临时解决办法
- Hibernate中如何用HQL进行模糊查询
- SQLite-Python中如何返回、查询中文字段
- Mybatis 一个搜索框对多个字段进行模糊查询
- 模糊查询:Spring Data JPA 如何进行模糊查询(LIKE) ?
- 在arcgis使用python脚本进行字段计算时是如何解决中文问题的
- Web开发——问题:PreparedStatement如何使用like进行模糊查询
- 如何在java List中进行模糊查询
- mybatis同一个搜索框对多个字段进行模糊查询
- Spring data jpa模糊查询,根据某一个字段,或者多个字段进行模糊查询
- 如何进行ibatis动态多条件组合查询以及模糊查询
- 一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
- mybatis同一个搜索框对多个字段进行模糊查询
- 如何在java List中进行模糊查询