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

37 sql oracle

如何在Oracle中编写查询而忽略要比较的字符串的情况?例如,"天使","天使","天使","天使","AngEl"在比较时都是相同的.

Gar*_*Ray 53

如果您匹配字段使用的完整值

WHERE UPPER(fieldName) = 'ANGEL'
Run Code Online (Sandbox Code Playgroud)

编辑:从你想要使用的评论:

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%' 
Run Code Online (Sandbox Code Playgroud)

  • 如果customer表很大,那么考虑在这种类型的查询的upper(name)上添加基于函数的索引是值得的. (10认同)
  • 想要jaj,如果Gary的答案解决了你的问题,你应该接受就是答案.:-) (2认同)

ben*_*wey 18

您可以使用UPPER关键字:

SELECT *
FROM Customers
WHERE UPPER(LastName) = UPPER('AnGel')
Run Code Online (Sandbox Code Playgroud)


Pab*_*ruz 12

您可以使用:

select * from your_table where upper(your_column) like '%ANGEL%'
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用:

select * from your_table where upper(your_column) = 'ANGEL'
Run Code Online (Sandbox Code Playgroud)

如果你正在寻找在你的col_column字段之前或之后没有其他字符的匹配,那将会更有效率,正如Gary Ray在他的评论中所建议的那样.


Sma*_*003 5

在比较两个或多个字符串之前,首先执行以下命令

alter session set NLS_COMP=LINGUISTIC;
alter session set NLS_SORT=BINARY_CI;
Run Code Online (Sandbox Code Playgroud)

在执行了这两个语句之后,你可以比较字符串并且不区分大小写.例如,你有两个字符串s1 ='Apple'和s2 ='apple',如果你想在执行上述语句之前比较两个字符串然后这两个字符串将被视为两个不同的字符串,但是当您在执行两个alter语句后比较字符串时,那两个字符串s1和s2将被视为相同的字符串

使用这两个陈述的原因

我们需要设置NLS_COMP = LINGUISTIC和NLS_SORT = BINARY_CI以便使用10gR2不区分大小写.由于这些是会话可修改的,因此不像在初始化参数中设置它们那么简单.我们可以在初始化参数中设置它们,但它们只影响服务器而不影响客户端.