sqlite Android Room append String to Select columns

ev7lccsx  于 2023-04-12  发布在  SQLite
关注(0)|答案(1)|浏览(141)

在我的表中,我有以下结构:

CREATE TABLE "species" (
    "_id"   TEXT NOT NULL,
    "name"  TEXT,
    "name_es"   TEXT,
    "name_it"   TEXT,
    "name_fr"   TEXT,
    "name_de"   TEXT,
    PRIMARY KEY("_id")
);

正如您所看到的,我的“name”列被本地化为多种语言,并在末尾附加了_isocode。
我试图弄清楚如何操作DAO查询,以便在Select本身中附加lang参数,类似于以下内容:

@Query("SELECT name " + lang +
        " FROM species")
List<SpeciesEntity> getSpecies(String lang);

但是它根本不起作用(它甚至不能编译),我也试过像这样使用SQLITE concat ||

@Query("SELECT name||:lang " +
        " FROM species")
List<SpeciesEntity> getSpecies(String lang);

但它也不起作用,它只将_es isocode附加到实际的name列值,而不是检索name_es列值。有什么方法可以实现我所需要的吗?

nvbavucw

nvbavucw1#

SQLite不支持动态SQL,因此您无法动态创建列名。
您可以使用CASE表达式检查值:lang并返回您应该选择的列:

SELECT CASE :lang
         WHEN '_es' THEN name_es
         WHEN '_it' THEN name_it
         WHEN '_fr' THEN name_fr
         WHEN '_de' THEN name_de
         ELSE name
       END AS my_name
FROM species

我假设:lang是以_开头的字符串,就像_xx一样。

相关问题