DB2案例敏感性

min*_*int 4 db2 ibm-midrange

我很难让我的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)

dcp*_*dcp 6

为什么不这样做:

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运行后,您可以从此日志表中进行选择以查看发生的情况.