在SQLite中,可以使用以下命令更改"LIKE"的区分大小写的行为:
PRAGMA case_sensitive_like=ON;
PRAGMA case_sensitive_like=OFF;
Run Code Online (Sandbox Code Playgroud)
但是在我的情况下,我想执行一个查询,其中一部分是区分大小写的,而其中一部分不是.例如:
SELECT * FROM mytable
WHERE caseSensitiveField like 'test%'
AND caseInsensitiveField like 'g2%'
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我有一个查询sqlite3数据库,它提供了排序数据.数据基于varchar列"名称" 列进行排序.现在当我进行查询时
select * from tableNames Order by Name;
Run Code Online (Sandbox Code Playgroud)
它提供这样的数据.
Pen
Stapler
pencil
意味着它正在考虑区分大小写的东西.我想要的方式如下
Pen
pencil
Stapler
那么我应该在sqlite3数据库中进行哪些更改以获得必要的结果?
我希望能够Artist.case_insensitive_find_or_create_by_name(artist_name)[1](并且它可以在sqlite和postgreSQL上工作)
实现这一目标的最佳方法是什么?现在我只是直接向Artist类中添加一个方法(有点难看,特别是如果我想在另一个类中使用此功能,但无论如何):
def self.case_insensitive_find_or_create_by_name(name)
first(:conditions => ['UPPER(name) = UPPER(?)', name]) || create(:name => name)
end
Run Code Online (Sandbox Code Playgroud)
[1]:理想情况下,这可能是Artist.find_or_create_by_name(artist_name, :case_sensitive => false),但这似乎更难实施
我想从ORMLite DAO的情况下不敏感地订购我的数据对象.
目前我正在使用以下sqlite代码来区分我的所有者项:
ownerDao.queryBuilder().orderBy("Name", true).query();
Run Code Online (Sandbox Code Playgroud)
我在这里看到sqlite支持不区分大小写的"order by"和以下原始SQL:
SELECT * FROM owner ORDER BY Name COLLATE NOCASE
Run Code Online (Sandbox Code Playgroud)
queryRaw()添加所需后缀的任何简单方法(比调用更容易)?
另一种解决方案是columnDefinition将DatabaseField注释的属性设置为TEXT COLLATE NOCASE?
有人可以提供一些示例代码来剥离变音符号(即,替换具有重音符号,变音符号等的字符,以及它们的无重音,无语音等字符等价物,例如,每个重音符é将成为纯ASCII e)来自UnicodeString使用C++中的ICU库?例如:
UnicodeString strip_diacritics( UnicodeString const &s ) {
UnicodeString result;
// ...
return result;
}
Run Code Online (Sandbox Code Playgroud)
假设s已经规范化了.谢谢.
我应该如何在Python中为SQLite3进行真正的转义?
\n\n如果我用谷歌搜索它(或搜索 stackoverflow),就会有大量的问题,每次的回答都是这样的:
\n\ndbcursor.execute("SELECT * FROM `foo` WHERE `bar` like ?", ["foobar"])\nRun Code Online (Sandbox Code Playgroud)\n\n这有助于防止 SQL 注入,如果我只用“=”进行比较就足够了,但它当然不会删除通配符。
\n\n所以如果我这样做
\n\ncursor.execute(u"UPDATE `cookies` set `count`=? WHERE `nickname` ilike ?", (cookies, name))\nRun Code Online (Sandbox Code Playgroud)\n\n一些用户可以为昵称提供“%”,并用一行替换所有 cookie 条目。 \n我可以自己过滤它(呃\xe2\x80\xa6 无论如何,我可能会忘记那些鲜为人知的通配符之一) ,我可以在昵称和昵称上使用小写字母,并将“ilike”替换为“=”,但我真正想做的是:
\n\nfoo = sqlescape(nick)+"%"\ncursor.execute(u"UPDATE `cookies` set `count`=? WHERE `nickname` ilike ?", (cookies, foo))\nRun Code Online (Sandbox Code Playgroud)\n 我找不到一个好例子,但如果数据库中的名称是"namehascapsinit",它不会返回任何内容.无论如何都要忽略案例?
String selection = MyTable.COL_NAME + " = ?";
String[] selectionArgs = new String[]{ "NameHasCapsInIt" };
c = getActivity().getContentResolver().query(MyTable.CONTENT_URI, null, selection, selectionArgs, null);
Run Code Online (Sandbox Code Playgroud)
预先感谢!
因此,我尝试使用 ef-core 进行 linq 查询来执行 where 搜索,但无论我尝试什么,都无法让它执行不区分大小写的搜索。
例如,如果我搜索“星期二”,它不会获取任何数据,因为数据库中的所有内容都保存为“星期二”。
搜索后,我发现您必须通过 ef core 迁移告诉 sqlite 您希望它对每个属性不区分大小写,并使用以下代码。
b.Property<string>("DayOfWeek")
.HasColumnType("TEXT COLLATE NOCASE");
Run Code Online (Sandbox Code Playgroud)
该信息位于 ContextModelSnapshot.cs 文件中。
所以我这样做了,删除了数据库并执行了“更新数据库”,创建了一个新数据库,但没有任何改变。
现在我当然可以.ToLower()在每个搜索中使用 the ,但是如果我忘记将其添加到每个 where 子句,那只会影响性能并增加失败的可能性。
我使用以下包来创建、迁移和访问数据库。
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.1">
Run Code Online (Sandbox Code Playgroud)
我错过了什么或者我是否误解了 sqlite 不区分大小写查询的整个概念?
sqlite ×5
sql ×3
android ×2
activerecord ×1
asp.net-core ×1
c++ ×1
diacritics ×1
escaping ×1
icu ×1
ormlite ×1
python ×1
ruby ×1
sql-like ×1
sql-order-by ×1
unicode ×1