我正在尝试根据https://superuser.com/questions/602252/can-chrome-browser-history-be-exported-to-an-html-file使用sqlite3浏览我的Chrome历史记录文件。我正在使用“历史记录”数据库的副本。
我希望能够使用sqlite3函数按站点组织URL。我试图弄清楚如何从url列中提取站点(域名)。
一旦我知道了魔术功能,我计划使用此功能,以便可以在site列上编写查询。
ALTER TABLE urls ADD COLUMN site TEXT;
UPDATE urls SET site = ...;
答案 0 :(得分:0)
到目前为止我有
SELECT
SUBSTR(SUBSTR(url, INSTR(url, '//') + 2), 0, INSTR(SUBSTR(url, INSTR(url, '//') + 2), '/')) AS site
FROM urls;
它似乎可以工作,但是很笨重。有更好的方法吗?
答案 1 :(得分:0)
当某些网址没有http(s)://
或结尾/
时,这里的公式可以正确处理。
第一个版本使用子选择:
select *, CASE when INSTR(domstage1, '/') > 0 then substr(domstage1, 1, instr(domstage1, '/')-1) else domstage1 end as domain
from (select *, CASE when INSTR(url, '//') > 0 then substr(url, INSTR(url, '//')+2) else url end as domstage1 from urls);
我发现第二个基于CTE的版本更易于管理和阅读。我还使用了更紧凑的IIF()
(在sqlite 3.32中添加),而不是CASE
。
with
stage1 as (select url, INSTR(url, '//') as idx_ss from logs where url is not NULL),
stage2 as (select *, IIF(idx_ss > 0, SUBSTR(url, idx_ss+2), url) as dom1 from stage1),
stage3 as (select *, INSTR(dom1, '/') as idx_s from stage2),
stage4 as (select *, IIF(idx_s > 0, SUBSTR(dom1, 1, idx_s-1), dom1) as domain from stage3)
select domain from stage4;
从具有约5000行的小型数据库的计时来看,它们的表现似乎差不多。