在我的 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)。
正如您已经发现的那样,这种存储月份的方式对于搜索来说并不是最佳选择。
当我存储这样的数据时,我更喜欢使用由 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。