如何在Android的SQLiteDatabase类的delete()方法中进行不区分大小写的比较

bt1cpqcv  于 2023-01-09  发布在  SQLite
关注(0)|答案(1)|浏览(113)

我正在Kotlin中使用SQLite制作一个Android应用程序,我使用下面的代码删除带有“subject”列的记录。
第一个月
它按预期工作,例如,如果我提供 subject 字符串“Math”,它将删除主题为“Math”的记录。
我的问题是,我怎样才能不区分大小写地删除主题为“数学”的记录。我的意思是,Math或Math应该删除记录。
我在某个地方读到可以在SQL语句中将“COLLATE NOCASE”用作DELETE FROM TABLE_NAME WHERE subject = "math" COLLATE NOCASE;
但是当我在Android中使用SQLiteDatabase类的**delete()**方法时,我想知道如何实现同样的不区分大小写的比较。

vmpqdwk3

vmpqdwk31#

对于正常的大小写不敏感,您可以使用LIKE而不是=,例如

val rows = db.delete(TABLE_NAME, "subject LIKE ?", arrayOf(subject))
  • 有关https://www.sqlite.org/lang_expr.html#the_like_glob_regexp_match_and_extract_operators更深入的解释和注意事项等,请参见www.example.com。

以下演示了使用SQLite工具(在本例中为Navicat,其他工具也存在)来使用原生SQLite:-

DROP TABLE IF EXISTS example; /* just in case */
CREATE TABLE IF NOT EXISTS example (subject TEXT); /* create the table */
/* Add some testing data */
INSERT INTO example VALUES ('Math'),('MAth'),('math'),('mATH'),('something else');
SELECT * FROM example; /* output the original data (Result 1)*/
DELETE FROM example WHERE subject = 'math'; /* case sensitive delete*/
SELECT * FROM example; /* output the data after deletion (Result 2)*/
DELETE FROM example  WHERE subject LIKE 'math'; /* case insensitive deletion */
SELECT * FROM example; /* output the data after deletion (Result 3)*/
/* Cleanup Environment */
DROP TABLE IF EXISTS example;

导致:-

  • 原始数据

  • 区分大小写删除后(即仅删除math

  • 删除不区分大小写后(即删除所有行(除something外))
  • 如果math行以前未被删除,我将删除该行

我在哪里读到我可以在SQL语句中使用“COLLATE NOCASE”作为DELETE FROM TABLE_NAME WHERE subject =“math”COLLATE NOCASE;
那么你可以用途:-

val rows = db.delete(TABLE_NAME, "subject=? COLLATE NOCASE", arrayOf(subject))
  • 请注意,**delete**方法的第2个参数的文档说明如下:-
    **whereClause**字符串:删除时应用的可选WHERE子句。传递null将删除所有行。
  • 而不使用WHERE关键字本身
  • WHERE由方法添加,如FROM添加到tablename(第一个参数),DELETE添加;当构建要执行的SQL时)。
  • 即整个子句(如上所示)。WHERE子句期望和表达式,这可能是相当复杂的见上面的链接,滚动到顶部的表达式可以包括什么。

相关问题