我希望在不修改实际查询的情况下,在Firebird数据库中执行大小写不敏感的搜索。换句话说,我希望所有现有的“SELECT/WHERE/LIKE”语句都能检索BOB、Bob和bob。Firebird配置是否允许修改此行为?
我希望在不修改实际查询的情况下,在Firebird数据库中执行大小写不敏感的搜索。换句话说,我希望所有现有的“SELECT/WHERE/LIKE”语句都能检索BOB、Bob和bob。Firebird配置是否允许修改此行为?
CREATE TABLE PERSONS (
PERS_ID INTEGER NOT NULL PRIMARY KEY,
LAST_NAME VARCHAR(50),
FIRST_NAME VARCHAR(50)
);
CREATE TABLE PERSONS (
PERS_ID INTEGER NOT NULL PRIMARY KEY,
LAST_NAME VARCHAR(50) COLLATE DE_DE,
FIRST_NAME VARCHAR(50) COLLATE DE_DE
);
或者在调用 UPPER()
函数时进行:
SELECT UPPER (LAST_NAME COLLATE DE_DE) FROM PERSONS;
http://www.destructor.de/firebird/caseinsensitivesearch.htm
或者您可以编辑您的查询并添加lower()
函数。
LOWER()
可用于:DSQL,ESQL,PSQL
添加于:2.0
说明:返回输入字符串的小写等效字符串。该函数还可以正确地将非ASCII字符转换为小写形式,即使默认(二进制)排序规则被使用也是如此。但字符集必须是适当的:例如,对于ASCII或NONE,只有ASCII字符会被转换为小写形式;对于OCTETS,则整个字符串不变。
结果类型:VAR(CHAR)
语法:
LOWER (str)
重要提示
如果您的数据库中声明了外部函数LOWER
,它将会混淆内部函数。为了使内部函数可用,请删除或修改外部函数(UDF)。
示例:
select field from table
where lower(Name) = 'bob'
http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-lower.html
死灵召唤。
您可以指定排序规则而不是小写字段:
SELECT field FROM table
WHERE Name = 'bob' COLLATE UNICODE_CI
请查看https://firebirdsql.org/refdocs/langrefupd21-collations.html。
或许您还可以将其指定为数据库的默认字符集,请参阅http://www.destructor.de/firebird/charsets.htm。
最终,我选择创建包含所需字段的小写版本的影子列。