如何在Oracle中编写查询,而忽略了要比较字符串的情况?例如,“天使”,“天使”,“天使”,“天使”,“AngEl”在比较时都会相等。
答案 0 :(得分:50)
如果您匹配字段的完整值,请使用
WHERE UPPER(fieldName) = 'ANGEL'
编辑:根据您要使用的评论:
SELECT
RPAD(a.name, 10,'=') "Nombre del Cliente"
, RPAD(b.name, 12,'*') "Nombre del Consumidor"
FROM
s_customer a,
s_region b
WHERE
a.region_id = b.id
AND UPPER(a.name) LIKE '%SPORT%'
答案 1 :(得分:17)
您可以使用UPPER关键字:
SELECT *
FROM Customers
WHERE UPPER(LastName) = UPPER('AnGel')
答案 2 :(得分:10)
您可以使用:
select * from your_table where upper(your_column) like '%ANGEL%'
否则,您可以使用:
select * from your_table where upper(your_column) = 'ANGEL'
如果您在 your_column 字段之前或之后寻找没有其他字符的匹配项,那么效率会更高,正如Gary Ray在评论中所建议的那样。
答案 3 :(得分:5)
在比较两个或多个字符串之前,首先执行以下命令
alter session set NLS_COMP=LINGUISTIC;
alter session set NLS_SORT=BINARY_CI;
在执行了这两个语句之后,您可以比较字符串并且不区分大小写。例如,您有两个字符串s1 =' Apple'和s2 =' apple',如果你想在执行上述语句之前比较两个字符串,那么这两个字符串将被视为两个不同的字符串,但是当你在执行两个alter语句后比较字符串时那么这两个字符串s1和s2将被视为相同的字符串
使用这两个陈述的原因
我们需要设置NLS_COMP = LINGUISTIC和NLS_SORT = BINARY_CI才能使用10gR2不区分大小写。由于这些是会话可修改的,因此不像在初始化参数中设置它们那么简单。我们可以在初始化参数中设置它们,但它们只影响服务器而不影响客户端。
答案 4 :(得分:2)
关于Dredel先生的回答和tuinstoel评论的更多细节。 列中的数据将以其特定情况存储,但您可以更改会话的区分大小写以进行匹配。
您可以更改会话或数据库以使用语言或不区分大小写的搜索。您还可以设置索引以使用特定的排序顺序。
例如
ALTER SESSION SET NLS_SORT=BINARY_CI;
一旦你开始学习非英语语言,有重音等等,就会对重音不敏感提供额外的支持。 某些功能因版本而异,因此请查看适用于您的特定Oracle版本的Globablization文档。最新的(11g)是here
答案 5 :(得分:1)
SELECT STRCMP(“ string1”,“ string2”);
如果字符串相等,则返回0。
答案 6 :(得分:1)
为避免字符串转换比较,请使用 COLLATE SQL_Latin1_General_CP1_CI_AS。
示例:
SELECT UserName FROM Users
WHERE UserName COLLATE SQL_Latin1_General_CP1_CI_AS = 'Angel'
这将返回任何用户名,无论是 ANGEL、angel 还是 Angel 等。
答案 7 :(得分:0)
我不记得确切的语法,但您可以将表列设置为不区分大小写。但是要小心,因为那样你就不能再根据案例进行匹配了,如果你想要'酷'不匹配'CoOl'就不再可能了。