我想向我的資料庫提供一個查詢,該查詢將搜索 Column2(site_id) 中是否存在字串,然后將該字串放入一個新表中,并在該行中使用其前列的值。
該表只有 2 列,并且 site_id 列可能有許多我想要的 5 字字串。
在下面的示例中,我想獲取所有特定的站點 ID。例如:E7089 或 E7459(我需要所有這些,第一個單詞是隨機的,如 E 或 T 等,四個數字是可更改的)
當前的第一行是這樣的:有一個ticket_id和許多site_ids(我只需要像:g1231或g1236這樣的站點ID,而不是括號中的地址)
ticket_id | site_id |
sss-bb-12312312-12312 | g1231(afsdgf-sdgsdgdg), g1236(sdfsdgsdg), g3212(asdfas-dfsd), b2311(asdasd), b3213(asdfsdf)
并使它像這樣:
ticket_id | site_id |
sss-bb-12312312-12312 g1231
sss-bb-12312312-12312 g3211
sss-bb-12312312-12312 g1236
sss-bb-12312312-12312 b2311
sss-bb-12312312-12312 b3213
我已經可以搜索整個第二列并使用正則運算式找到 5 個字的站點 ID(如果您想嘗試:[AZ]\d{1,4}),但我無法從行中提取它們并插入每個將它們放到一個新行中,我當前的代碼是這樣的:
drop TABLE if EXISTS test2;
CREATE TABLE if NOT EXISTS test2 (
Ticket_id varchar,
site_id varchar
);
INSERT INTO test2
SELECT ticket_id, site_id
FROM TEST WHERE site_id regexp '[A-Z]\d{1,4}';
但上面的代碼會找到具有 site_id 的行并插入所有與搜索匹配的行,我不想要這樣。有人可以幫助將第一個轉換為第二個嗎?基本上當前的資料庫是這樣的:
culumn1 | column2
ticket1 | many site ids
ticket2 | many site ids
但我想要這樣:
culumn1 | column2
ticket1 | id
ticket1 | id
ticket1 | id
ticket1 | id
ticket2 | id
ticket2 | id
ticket2 | id
- 門票不需要任何更改,除了被復制到具有分配的 site_id 的新行中
- 每張票有很多 site_ids(我已經可以用正則運算式找到它們)需要像上面提到的那樣被分隔到新的行中。
- 它只需要在sqlite db瀏覽器和db瀏覽器中完成(它是這樣分配的,必須這樣完成,所以不幸的是沒有python)
uj5u.com熱心網友回復:
您需要遞回 CTE 來拆分表的site_id
列test1
和 SUBSTR() 函式以將前 5 個字符插入表中test2
:
WITH cte AS (
SELECT ticket_id, '' site_id, site_id || ',' s
FROM test1
UNION ALL
SELECT ticket_id,
SUBSTR(s, 0, INSTR(s, ',')),
SUBSTR(s, INSTR(s, ',') 1)
FROM cte
WHERE s <> ''
)
INSERT INTO test2 (ticket_id, site_id)
SELECT ticket_id, SUBSTR(TRIM(site_id), 1, 5)
FROM cte
WHERE site_id <> '';
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470335.html
標籤:sqlite sql-插入 递归查询 子串 db-浏览器-sqlite
下一篇:如何比較兩個表的計數