我很难让我的DB2(AS/400)查询不区分大小写.
例如:
SELECT *
FROM NameTable
WHERE LastName = 'smith'
Run Code Online (Sandbox Code Playgroud)
将不返回任何结果,但以下返回1000的结果:
SELECT *
FROM NameTable
WHERE LastName = 'Smith'
Run Code Online (Sandbox Code Playgroud)
我已经读过将SortSequence/SortType放入你的连接字符串但是没有运气......有人对此有所了解吗?
编辑:
这是存储过程:
BEGIN
DECLARE CR CURSOR FOR
SELECT T . ID ,
T . LASTNAME ,
T . FIRSTNAME ,
T . MIDDLENAME ,
T . STREETNAME || ' ' || T . ADDRESS2 || ' ' || T . CITY || ' ' || T . STATE || ' ' || T . ZIPCODE AS ADDRESS ,
T . GENDER ,
T . DOB ,
T . SSN ,
T . OTHERINFO ,
T . APPLICATION
FROM
( SELECT R . * , ROW_NUMBER ( ) OVER ( ) AS ROW_NUM
FROM CPSAB32.VW_MYVIEW
WHERE R . LASTNAME = IFNULL ( @LASTNAME , LASTNAME )
AND R . FIRSTNAME = IFNULL ( @FIRSTNAME , FIRSTNAME )
AND R . MIDDLENAME = IFNULL ( @MIDDLENAME , MIDDLENAME )
AND R . DOB = IFNULL ( @DOB , DOB )
AND R . STREETNAME = IFNULL ( @STREETNAME , STREETNAME )
AND R . CITY = IFNULL ( @CITY , CITY )
AND R . STATE = IFNULL ( @STATE , STATE )
AND R . ZIPCODE = IFNULL ( @ZIPCODE , ZIPCODE )
AND R . SSN = IFNULL ( @SSN , SSN )
FETCH FIRST 500 ROWS ONLY )
AS T
WHERE ROW_NUM <= @MAXRECORDS
OPTIMIZE FOR 500 ROW ;
OPEN CR ;
RETURN ;
Run Code Online (Sandbox Code Playgroud)
为什么不这样做:
WHERE lower(LastName) = 'smith'
Run Code Online (Sandbox Code Playgroud)
如果您担心性能(即查询不使用索引),请记住DB2有函数索引,您可以在这里阅读.基本上,你可以创建一个索引upper(LastName).
编辑 要执行我在评论中讨论的调试技术,您可以执行以下操作:
create table log (msg varchar(100, dt date);
Run Code Online (Sandbox Code Playgroud)
然后在SP中,您可以将消息插入此表以进行调试:
insert into log (msg, dt) select 'inside the SP', current_date from sysibm.sysdummy1;
Run Code Online (Sandbox Code Playgroud)
然后在SP运行后,您可以从此日志表中进行选择以查看发生的情况.