我正在使用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
如何从一个表的“国家/地区”列中拆分值,然后将其插入另一张表的“国家/地区”列中?
答案 0 :(得分:2)
SQLite中没有split
函数。
当然有substring
函数,但是它不适合您的需求,因为每一行都可以包含1个以上的逗号。
如果您是SQLite的专家,我想您可以使用substring
创建一个递归语句来拆分每一行。
如果您不使用Python读取数据,请分割每一行并将其写回到db。
答案 1 :(得分:0)
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!='';