在SQL查询函数语句里实现啊(或者使用存储过程) 我们知道字符字段中可以包含大写字符和小写字符, 如何在SQL模糊查询中忽略对大小写字符的处理? 例如: SELECT * FROM TABLENAME WHERE FIELDB LIKE ’A%’, 希望得到以’A’ 或 ’a’开头的所有记录.我所遇到的有两种解决办法,如下:一. 使用sort sequence table可以解决此类问题. 以下将解释如何使用’SORT SEQUENCE’:*系统值QSRTSEQ默认值为*HEX;
*用户简要表中SRTSEQ参数默认值为*SYSVAL;
*命令STRSQL和CRTSQLxxx中SRTSEQ参数默认值为*JOB. 因此,通常OS/400的作业默认的sort sequence值为*HEX, 这就是说, 字符表中的每一个字符都有各自的相对顺序和权重. 例如: 字符’A’的权重为x’C1’, 字符’a’的权重为x’81’. 因此任何在字符’A’和’a’之间的比较, 都认为两者不相同. 那么如果希望等同字符’A’和’a’之间的比较, 就需要将两者的权重设置为相同. 将’SORT SEQUENCE’设置为*LANGIDSHR就能达到这样的效果. 设置方法如下:1. STRSQL2. F13 - 服务3. 1 - 改变对话属性4. 向下翻页后找到’Sort Sequence’并将其改为*LANGIDSHR5. 按两次回车键6. 运行一条SQL语句, 例如:
SELECT * FROM FILE WHERE FIELD1 LIKE ’A%’ 或
SELECT * FROM FILE WHERE FIELD1 LIKE ’a%’7. 检查查询结果可以发现, 字段FIELD1以字符’A’和’a’开头的记录都被搜索出来.二. 在SQL中使用函数:不同数据库对大小写处理是不一样的, SQL SERVER/ORACLE都是大小写敏感的. 如果要在SQL中忽略大小写, ORACLE中可以这样写:
select *
from tableA
where UPPER(oneColumn) = UPPER(’"value")’;
当然UPPER()函数也可以用LOWER()函数来替代, 只要前后一致就可以. 值得一提的是,在有些数据库中使用的函数名不一样,例如在DB2,DB2E中使用的是UCASE() and LCASE(). 但是在DB2或DB2E中,一般只是使用函数来改变字段的大小写,而传进的参数值通常在代码中改写。例如:select *
from tableA
where UPPER(oneColumn) = "VALUE"; 而不能这样:select *
from tableA
where UPPER(oneColumn) = UPPER(‘"value")’;