我正在通过SQL Server执行下面的DB2 SQL(因此需要在DB2 SQL中):
exec ('
select
TRIM (vhitno) AS "Item",
TRIM (mmitds) AS "Description",
TRIM (SUBSTRING (vhitno,12,4)) AS "Size",
vhalqt AS "Available"
from m3fdbtest.oagrln
left outer join m3fdbtest.mdeohe
on vhcono = uwcono
and vhcuno = uwcuno
and vhagno = uwagno
and vhitno = uwobv1
left outer join m3fdbtest.mitmas
ON vhcono = mmcono
AND vhitno = mmitno
where uwcono = 1
and uwstdt >= ?
and uwlvdt <= ?
and uwcuno = ''JBHE0001''
and uwagst = ''20''
and (vhitno LIKE ''%'' || ? || ''%''
or mmitds LIKE ''%'' || ? || ''%'')',
@From, @To, @Search, @Search) at M3_TEST_ODBC
但是,DB2是区分大小写的--如何使mmitds和vhitno上的两个LIKES不区分大小写?
4条答案
按热度按时间j2cgzkjk1#
您可以使用类似于以下内容的内容:
请注意:这可能会影响索引选择,但您可以创建如下索引:
如果您使用的是RPG中嵌入的SQL,则可以将程序设置为使用不区分大小写的排序和比较
要使用JDBC执行此操作,您需要设置以下驱动程序属性:
对于ODBC连接,您需要设置以下连接属性:
ikfrs5lh2#
这是一个常见问题,所以也许你应该阅读更多,例如:这个article是众多方法中的一个,存在各种方法。即使实现方式不同,示例原则也适用于Linux/Unix/Windows等i系列。
如果您缺少更改表的访问权限(例如添加列,索引等),则在 predicate 列上使用
UPPER()
或LOWER()
可能会导致性能下降。这可能会导致无法使用这些列上的索引,从而降低性能。您应该首先验证Db2表中的相关列是否真的有大小写混合的值,如果它们只有一种情况,则更改查询以确保与该情况进行比较。
如果列具有大小写混合的值,并且不存在固定大小写的列(或UDF),并且如果出于重要的业务目的而频繁运行查询,则最佳建议是通过多种方法中的任意一种来确保表具有适当的设计(以支持不区分大小写的比较)。
如果您的Db2版本中提供正则表达式函数,您也可以考虑使用REGEXP_LIKE和适当的正则表达式。
vtwuwzda3#
数据库设置
在database creation中有一个数据库配置设置,不过它是基于unicode的。
默认的Unicode排序规则算法由不带任何属性的UCA500R1关键字实现。由于默认的UCA不能同时包含Unicode支持的每种语言的排序规则序列,因此可以指定可选的属性来定制UCA排序。这些属性由下划线(_)字符分隔。UCA500R1关键字和任何属性构成一个UCA排序规则名称。
“强度”属性确定在整理或比较文本字符串时是否考虑重音或大小写。在没有大小写或重音的书写系统中,“强度”属性控制类似的重要功能。可能的值为:第一级(1)、第二级(2)、第三级(3)、第四级(4)和恒等式(I)。忽略:
几乎所有字符都可以通过前三个强度级别来区分,因此在大多数语言环境中,默认的“强度”属性设置为第三级。但是,如果“替代”属性(如下所述)被设置为移位,则四进制强度等级可用于打破白色字符、标点符号标识强度级别用于区分相似的字符,例如数学上的粗体小A字符(U+1D41A)和数学上的意大利小A字符(U+1D44E)。
将“强度”属性设置为较高级别将减慢文本字符串的比较速度并增加排序关键字的长度。示例:
这对我很有效。正如你所看到的,..._S2也忽略大小写。
使用newer standard version时,它应该如下所示:
排序规则关键字:
UCA400R1
= Unicode标准4.0 = CLDR版本1.2UCA500R1
= Unicode标准5.0 = CLDR版本1.5.1CLDR181
= Unicode标准5.2 = CLDR版本1.8.1如果您的数据库已经创建,那么应该有一种change the setting的方法。
我确实有问题执行这一点,但据我所知,这是应该工作。
生成的表行
其他选项包括generating a upper case row:
d4so4syb4#
对于使用db2/400并通过php/pdo连接的我来说,我在/QOpenSys/etc/odbc. ini的odbc.ini中添加了一个DSN,其中包含jmarkmurphy指定的共享权重的以下连接选项子集:
IBM odbc连接选项可以在here中找到