0

Oracle 10g 中是否有一种方法可以设置不区分大小写的搜索,并且可能还翻译某些表上的所有传入选择?

我有一个这样的选择:

SELECT city.city_name as city,
    city.city_zip as zip,
    city.city_name || ' - ' || county.county_name as county
FROM T_ADDRESSFILLCITY city
JOIN T_ADDRESSFILLCOUNTY county ON county.countyid = city.countyid
WHERE LOWER(TRANSLATE(city.city_name, 'úüűůéěäáôöőóťčížďňšŕýľřĺąćęłńóśźż', 'uuuueeaaooootcizdnsrylrlacelnoszz')) LIKE LOWER(TRANSLATE({PARAM}, 'úüűůéěäáôöőóťčížďňšŕýľřĺąćęłńóśźż', 'uuuueeaaooootcizdnsrylrlacelnoszz'))

但我想把它改成这个

SELECT city.city_name as city,
    city.city_zip as zip,
    city.city_name || ' - ' || county.county_name as county
FROM T_ADDRESSFILLCITY city
JOIN T_ADDRESSFILLCOUNTY county ON county.countyid = city.countyid
WHERE city.city_name LIKE {PARAM}

并且有一个数据库机制(整理?,触发器?)来做忽略案例并默认为所有选择进行翻译。

但这应该只适用于特定的表,而不是整个数据库。

我什么也找不到。提前感谢您的提示。

4

1 回答 1

1

你应该尝试设置:

 alter session set nls_comp='LINGUISTIC';
 alter session set nls_sort='BINARY_AI';

然后运行第二个查询。这应该在 LIKE 上提供不区分重音大小写的搜索。参考:http ://docs.oracle.com/cd/B19306_01/server.102/b14225/ch5lingsort.htm#CIHJBFAD

另一种方法是使用convert. 例如:

where upper(convert(name, 'US7ASCII')) like upper(convert('%e%', 'US7ASCII'));
于 2013-01-16T13:40:35.953 回答