Android SQLite 搜索精确字符串

问题描述 投票:0回答:1

在我的 SQLite DB 表中,我有包含月份列的行。该列可能仅包含一个月,但也可能包含用星号分隔的多个月份。

E.g.
1st row MONTH: 1*
2nd:  3*4*9*
3rd:  12*
4th:  2*5*

我正在尝试获取所有行,例如月份栏包含 2*,表示二月。

Assume that month = 2 //february
month = month + "*"; 
String Query = "SELECT * FROM "+ TABLE_NAME + " WHERE " + month LIKE '%"+month+"%'";

我认为这会很好地工作,但是...正如在第 3 行中我有 12* 并且这应该是 12 月,查询在查找 2 月时返回此行,因为它在 12* 中找到了 2*。

有没有办法查找确切的字符串?所以当我搜索 2* 时,它只会找到单独的 2*,而不是 12*。 11* 与 11 月的问题相同,也可以找到 1 月的搜索。

一个可能不好,但我的工作想法是在数据库中写入月份,例如:(2)(5)(12)

那么在查找(2)时只会准确找到(2),并且不会返回(12)。

android android-sqlite
1个回答
0
投票

正如您已经发现的那样,这种存储月份的方式对于搜索来说并不是最佳选择。

当我存储这样的数据时,我更喜欢使用由 0 和 1 组成的 12 个字符的字符串,每个位置代表一个月。

所以你的例子是这样的:

1st row: 100000000000
2nd row: 001100001000
3rd row: 000000000001
4th row: 010010000000

然后,要搜索特定月份,只需查看相应的位置即可:

SELECT * FROM TABLE_NAME
WHERE SUBSTR(FIELD_NAME, POSITION, 1) = '1'

请记住,在 sqlite 的 substr() 函数中,字符串的第一个位置是 1。

© www.soinside.com 2019 - 2024. All rights reserved.