0%

[Mysql] 使用正規化篩選結果

由於使用 Python 爬政府公開資訊進 Mysql 後,如果只想選取特定字串出來可以使用 WHERE 搭配 Like;但是當我們要尋找的字串非常多時,我們可以使用 REGEXP 的方式篩選,個人覺得比較有效率及程式不會太過冗長。

如果有更好的作法也可以在下方回覆唷~XD


前情提要:

篩選前已先將 GOVDATA 匯入 Mysql,並篩選出資料集名稱包含

投資 | 證券 | 上市櫃 | 上市 | 上櫃 | 興櫃 | 公開發行 | 期貨 | 選擇權 | 權證 | 外資 | 陸資 | 證券 | 新聞

或者資料集描述包含

公司債 | 上市 | 上櫃 | 興櫃 | 公開發行 | 證交 | 櫃買 | 期貨

的資訊出來


語法

1
2
3
4
5
6
7
8

SELECT * FROM Table
WHERE
name1 REGEXP '^justin' OR -- 尋找開頭為justin的字串
name1 REGEXP '^(justin)' OR -- 尋找內容包含justin的字串
name1 REGEXP 'justin$' OR -- 尋找內容以justin為結尾的字串
name1 NOT REGEXP '^(justin)' -- 尋找內容不包含justin的字串


結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
`t1`.`完成` AS `完成`,
`t1`.`資料集名稱` AS `資料集名稱`,
`t1`.`服務分類` AS `服務分類`,
`t1`.`檔案格式` AS `檔案格式`,
`t1`.`資料下載網址` AS `資料下載網址`,
`t1`.`編碼格式` AS `編碼格式`,
`t1`.`資料集描述` AS `資料集描述`,
`t1`.`主要欄位說明` AS `主要欄位說明`,
`t1`.`提供機關` AS `提供機關`,
`t1`.`更新頻率` AS `更新頻率`,
`t1`.`詮釋資料更新時間` AS `詮釋資料更新時間`,
`t1`.`備註` AS `備註`
FROM
`datagov` `t1`
WHERE
( ( `t1`.`資料集名稱` REGEXP '^(投資|證券|上市櫃|上市|上櫃|興櫃|公開發行|期貨|選擇權|權證|外資|陸資|證券|新聞)' )
OR
( `t1`.`資料集描述` REGEXP '^(公司債|上市|上櫃|興櫃|公開發行|證交|櫃買|期貨)' ) )
ORDER BY
`t1`.`資料集名稱`