如何使用Sqlite将逗号分隔的数值分割成多行

3 人关注

我正在使用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

我如何从一个表中的国家列拆分数值并将其插入另一个表中的国家列?

python
sqlite
Mr_Moradi
Mr_Moradi
发布于 2018-07-28
3 个回答
user8959091
发布于 2018-07-28
0 人赞同

There is no split function in SQLite.
当然还有 substring 函数,但它不适合你的需要,因为每一行都可能包含1个以上的逗号。
如果你是一个SQLite专家,我想你可以用 substring 创建一个递归语句来分割每一行。
如果你不使用Python来读取数据,分割每一行并将其写回数据库。

xn.
xn.
发布于 2018-07-28
0 人赞同

你可以使用一个 递归公共表格表达 通过递归地提取Country列的子串来分割以逗号分隔的列。

CREATE TABLE country_split AS
WITH RECURSIVE split(id, value, rest) AS (
   SELECT ID, '', Country||',' FROM country
   UNION ALL SELECT
   substr(rest, 0, instr(rest, ',')),
   substr(rest, instr(rest, ',')+1)
   FROM split WHERE rest!=''
SELECT id, value
FROM split
WHERE value!='';
    
Mr_Moradi
Mr_Moradi
发布于 2018-07-28
0 人赞同

im solved im using 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 :