如何使用Sqlite将逗号分隔的值拆分为多行

时间:2018-07-28 13:28:36

标签: android sqlite android-sqlite

我正在使用Python和SQLite在android中操作字符串。 我有一个SQLite表格,看起来像这样:

| ID             | Country     
+----------------+-------------
| 1              | USA, Germany, Mexico 
| 2              | Brazil, Canada
| 3              | Peru

我想分割“国家/地区”列的逗号分隔值,并将其插入到另一个表国家/地区,以便“国家/地区”表看起来像这样

| ID             | Country     
+----------------+-------------
| 1              | USA
| 1              | Germany
| 1              | Mexico
| 2              | Brazil
| 2              | Canada
| 3              | Peru

如何从一个表的“国家/地区”列中拆分值,然后将其插入另一张表的“国家/地区”列中?

3 个答案:

答案 0 :(得分:2)

SQLite中没有split函数。
当然有substring函数,但是它不适合您的需求,因为每一行都可以包含1个以上的逗号。
如果您是SQLite的专家,我想您可以使用substring创建一个递归语句来拆分每一行。
如果您不使用Python读取数据,请分割每一行并将其写回到db。

答案 1 :(得分:0)

我已经解决了 我正在使用python

import sqlite3
db = sqlite3.connect(':memory:')
db = sqlite3.connect('mydb.db')
cursor = db.cursor()
cursor.execute("""Select * from Countries""")
all_data = cursor.fetchall()
cursor.execute("""CREATE TABLE IF NOT EXISTS Countriess
                    (ID TEXT,
                    Country TEXT)""")
for single_data in all_data:
    countriess  = single_data[1].split(",")
    for single_country in countriess :
        cursor.execute("INSERT INTO Countriess VALUES(:id,:name)", { "id": single_data[0], "name": single_country })
db.commit()

,并在使用sqlite db后另一个项目; :)

答案 2 :(得分:0)

您可以使用 recursive common table expression 通过递归提取 Country 列的子字符串来拆分逗号分隔的列。

CREATE TABLE country_split AS
WITH RECURSIVE split(id, value, rest) AS (
   SELECT ID, '', Country||',' FROM country
   UNION ALL SELECT
   id,
   substr(rest, 0, instr(rest, ',')),
   substr(rest, instr(rest, ',')+1)
   FROM split WHERE rest!=''
)
SELECT id, value
FROM split
WHERE value!='';