如何比较sql中的字符串忽略大小写?

时间:2009-05-16 03:03:55

标签: sql oracle

如何在Oracle中编写查询,而忽略了要比较字符串的情况?例如,“天使”,“天使”,“天使”,“天使”,“AngEl”在比较时都会相等。

8 个答案:

答案 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。

  • 如果string1 = string2,则此函数返回0(忽略大小写)
  • 如果string1
  • 如果string1> string2,则此函数返回1

https://www.w3schools.com/sql/func_mysql_strcmp.asp

答案 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'就不再可能了。