我正在将DB Browser用于SQLite。
我有一个名为“ df”的表和一列带有一堆名为“ links”的URL链接的列。所有链接均来自同一网站,并采用相同的结构化格式:
https://“网站名称” /“语言” /“内容类型” /“内容ID” /“内容名称”
几种语言示例: 1. en_au 2. fr_ca 3. zh_ 等。
链接的“内容类型”部分也只有一个唯一值。
目标: 我需要帮助从链接中提取所有内容ID。
我已经尝试过正则表达式,但这会拉出所有与正则表达式匹配的信息,而不是内容ID。我还使用了substr函数(请参见下面的代码),但这会引起一些问题: 1.有些链接的开头不是“ www”。 2.并非所有的内容ID都具有相同的字符长度。 3.并非所有的语言ID都具有相同的字符长度。
SELECT
substr(links, 36, instr(links, '/') +1) AS content_id
FROM df
答案 0 :(得分:1)
字符串操作?我将字符串'Type of content'与PatIndex()一起使用来查找该字符串的存在位置,然后使用CharIndex()来查找内容ID的开始和结束斜杠。然后使用Substring()将字符串拉出。
Create Table #links
(
link VarChar(200)
)
Insert Into #links Values
('''https://''website name''/''language''/''type of content''/''en_au''/''name of content'''),
('''https://''website name''/''language''/''type of content''/''fr_ca''/''name of content'''),
('''https://''website name''/''language''/''type of content''/''en_us''/''name of content''')
Query
Select SubString
(
link,
PatIndex('%type of content%',link)+17,
CharIndex('/',link,PatIndex('%type of content%',link)+17)-CharIndex('/',link,PatIndex('%type of content%',link))-1
)
As YourNewColumn
From #links
结果
YourNewColumn
'en_au'
'fr_ca'
'en_us'
答案 1 :(得分:0)
弄清楚了。这是Sqlite的答案:
SELECT
substr(links, instr(links, 'type of content') + 11, 6) AS content_id
FROM df
如果您具有一种类型的内容,例如在我的情况下,我只有blog_posts,则可以使用10。数字10允许您跳过指向content_id的url链接中的“ blog_posts /”。由于我所有的内容ID均为6个字符,因此我输入6以仅捕获6个值。