在where子句中不使用函数的不区分大小写的任何方法?
请指定您在何时/是否答复的数据库。我知道默认情况下MySQL已经不区分大小写。 Oracle,MSSQL或HANA呢?
select * from mytable WHERE upper(fieldname) = 'VALUE'
答案 0 :(得分:4)
collate SQL_Latin1_General_CP1_CS_AS
。
默认排序规则为 SQL_Latin1_General_CP1_CI_AS
,即 case insensitive
。而且,如果我们需要区分大小写,则添加 COLLATE Latin1_General_CS_AS
可以使搜索区分大小写。
查询
select * from [mytable]
where [fieldname] = 'VALUE' collate SQL_Latin1_General_CP1_CS_AS;
答案 1 :(得分:4)
由于您的问题被标记为Oracle,因此我将提供一个适用于Oracle的解决方案。
您可以为不区分大小写的搜索设置这些会话参数
SQL> alter session set NLS_COMP=ANSI;
SQL> alter session set NLS_SORT=BINARY_CI;
SQL> select 1 from DUAL where 'abc' = 'ABC';
1
----------
1
更多信息,请访问Linguistic Sorting and String Searching
@mathguy指出,
ALTER SESSION SET NLS_COMP=LINGUISTIC;
比使用ANSI
更常见答案 2 :(得分:0)
使显示的列大写(或小写)以进行比较是使大小写不敏感的比较的标准方法。 (UPPER
和LOWER
是SQL标准中定义的函数。)
如果您不想在该列上应用函数,那么您当然可以编写一个递归查询以生成值的所有大写/小写排列(“ VALUE”,“ vALUE”,“ VaLUE”, ...,'value'),然后检查您的列值是否在此集中。标准SQL提供SUBSTRING
函数来访问子字符串(例如,第n个字母),并提供CHAR_LENGTH
函数来获取字符串的长度。
这取决于您所使用的DBMS及其版本在多大程度上支持该标准。例如,在Oracle中,它是SUBSTR
而不是SUBSTRING
,是LENGTH
而不是CHAR_LENGTH
。另一方面,MySQL直接具有SUBSTRING
和CHAR_LENGTH
的功能,但仅从8.0版开始支持递归查询。
答案 3 :(得分:0)
这将起作用:
SELECT *
FROM mytable
WHERE REGEXP_LIKE (column_name, 'value', 'i');
答案 4 :(得分:0)
Oracle 12c答案
select * from mytable WHERE fieldname='Value' collate binary_ci
SAP HANA似乎没有其他方法可以使用上限或下限。
SQL Server和MySQL不区分大小写字母-默认情况下,它们不区分大小写。