[英]How to split these records into individual new ones?
我想搜索 column2 ( site_id
)中是否存在字符串,然后將該字符串放入一個新表中,並在該行中使用其前列的值。 該表只有 2 列,並且site_id
列可能有許多我想要的 5 字字符串。
我想獲取所有特定的站點 ID。 例如:E7089 或 E7459(我需要所有這些,第一個單詞是隨機的,如 E 或 T 等,四個數字是可變的)。
第一行有一個ticket_id
和許多site_id
。 我只需要像:g1231 或 g1236 這樣的站點 ID,而不是括號中的地址:
票號 | site_id |
---|---|
sss-bb-12312312-12312 | g1231(afsdgf-sdgsdgdg)、g1236(sdfsdgsdg)、g3212(asdfas-dfsd)、b2311(asdasd)、b3213(asdfsdf) |
讓它像這樣:
票號 | 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 |
我可以使用 regexp [AZ]\d{1,4}
找到 5 個單詞的站點 ID,但我無法將它們提取並插入到新行中。 我的代碼:
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
並插入匹配的行。 我不想要那個。 如何將第一個轉換為第二個?
當前數據庫:
第 1 列 | 第 2 列 |
---|---|
票1 | 許多網站ID |
票2 | 許多網站ID |
我希望它是:
第 1 列 | 第 2 列 |
---|---|
票1 | ID |
票1 | ID |
票1 | ID |
票1 | ID |
票2 | ID |
票2 | ID |
票2 | ID |
site_id
復制到新行中。site_id
需要分隔到新行。您需要遞歸 CTE 來拆分表test1
的site_id
列和 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 <> '';
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.