在工作中適當地使用一些技巧,總可以讓我們提高效率和准確率。
在 Notepad++ 中使用正則表達式進行高級查找替換,對於一些批量性質的工作是很有幫助的。我們來看下面一個例子:
這是在劍南春項目中遇到的一個實際問題。要求是在數據庫 MISC_SERIAL_QUEUE 表中寫入一大批模擬序列號數據,大致為這樣的形式:
- 01234567890000000001
- 01234567890000000002
- 01234567890000000003
- ……
當然,該表還有一些其他字段,比如“生成日期”等,也需要寫入值。
另外有一個潛在的要求,就是該數據寫入過程應該是可重復的,且每次重復操作都應該很簡單快捷。
基於以上要求,我們考慮最好能快速生成一大批 INSERT 語句。把這些 INSERT 語句保存在文件中,以便隨時拿來執行。下文就是實際操作的步驟。
使用 Excel 批量生成序列號¶
先使用 Excel 制作一張表格,有 A、B、C 三列,分別代表:主鍵ID、流水線、序列號。
- 主鍵ID A2 和 A3 單元格填 1、2 ,選中這兩個單元格,然后用鼠標往下拉多行,形成 1、2、3、4 ……。
- 流水線 B2 和 B3 單元格填 A、B ,選中這兩個單元格,雙擊選中區域的右下角那個小點,自動在 B 列形成 A、B、A、B、A、B ……。
- 序列號 在 C2 單元格寫一個公式 =TEXT(A2, "01234567890000000000") ,完成后就會看到 01234567890000000001 。
- 選中 C2 單元格,雙擊選中區域的右下角那個小點,自動在 C 列形成各個序列號。
- 另存為 CSV (逗號分隔) 格式的文件,比如 a.csv。CSV 就是 Comma Separated Version 的意思。這個文件的內容大致是這樣:
1,A,01234567890000000001 2,B,01234567890000000002 3,A,01234567890000000003 4,B,01234567890000000004 5,A,01234567890000000005 6,B,01234567890000000006 7,A,01234567890000000007 8,B,01234567890000000008 9,A,01234567890000000009 10,B,01234567890000000010
使用 Notepad++ 或 EditPlus 進行批量替換,生成 INSERT 語句¶
然后使用 Notepad++ 或 EditPlus 打開這個 a.csv 文件。
- 使用正則表達式查找(注意查找模式一定要選擇“正則表達式”):
(.*),(.*),(.*)
- 替換成:
Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (\1, '\2', '\3', SYSDATE);
- 這樣就得到了最終要的結果:
Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (1, 'A', '01234567890000000001', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (2, 'B', '01234567890000000002', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (3, 'A', '01234567890000000003', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (4, 'B', '01234567890000000004', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (5, 'A', '01234567890000000005', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (6, 'B', '01234567890000000006', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (7, 'A', '01234567890000000007', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (8, 'B', '01234567890000000008', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (9, 'A', '01234567890000000009', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (10, 'B', '01234567890000000010', SYSDATE);
解釋:
- .* 表示任意長度的字符串
- () 一對圓括號表示把括號中的內容作為一個參數(該參數可以用於替換)
- \1 \2 \3 分別表示第 1 、第 2 、第 3 對圓括號中包含的內容(也就是第 1 、第 2 、第 3 個參數)
這樣就拿到了一批 SQL 語句。到數據庫管理工具中去執行這些 SQL 就可以了。最后,不要忘記寫上 COMMIT 語句。
