gpt4 book ai didi

android - SQLite upper() 类似国际字符的函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:14 27 4
gpt4 key购买 nike

其实这个问题问了好几次,但我没能找到答案。

有一组只读的 SQLite 表 - 我无法更改它们的结构或重新定义排序规则。包含一些国际字符(俄语/中文等)的表格。

我想要一些不区分大小写的选择,例如:

select name from names_table where upper(name) glob "*"+constraint.toUpperCase()+"*"

它仅在 name 是拉丁/ASCII 字符集时有效,对于国际字符它不起作用。

SQLite 的手册是这样写的:

The upper(X) function returns a copy of input string X in which all lower-case ASCII characters are converted to their upper-case equivalent.

所以问题是:如何解决这个问题并使国际字符大写/小写?

最佳答案

这是 sqlite 中的已知问题。您可以通过 Android NDK 重新定义内置函数。这不是一个简单的方法。看this question

请注意,您的表的索引将不起作用(对于 UDF)并且查询可能会非常慢。

取而代之的是,您可以将您的数据(您查找的数据)以 ascii 格式存储在其他列中。

例如:

"insert into names_table (name, name_ind) values ('"+name+"',"+"'"+toAsciiEquivalent(name)+"')"

name name_ind
----------------
Имя imya
Name name
ыыы yyy

并按列 name_ind 搜索字符串

select name from names_table where name_ind glob "*"+toAsciiEquivalent(constraint)+"*"

此解决方案需要更多的数据空间,但它简单且快速。

关于android - SQLite upper() 类似国际字符的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com