1.運用場景
1.1 後臺的數據庫由於歷史原因音頻的的名字存儲添加了許多的標題,如:67.寶寶睡覺覺,13_神燈,4_13 The Flying Vet,02、兩隻老虎,25 de Diciembre,04 _ Peek_a_Boo等等。現在運營的需求批量的將名字前面的序號或者下劃線去掉,如:67.寶寶睡覺覺 改成 寶寶睡覺覺,13_神燈 改成 神燈......
2.問題分析
2.1 後臺數據幾萬條,運營一條一條改的話不現實,只能是我們程序猿弄咯。字符串、正則.....完美。趕緊百度一把:mysql 正則表達式。mysql使用正則表達式使用關鍵字:REGEXP ,開頭用:^,結尾:$,區間用:[ ] ,長度用:{}.....花個幾分鐘把我要的正則安排一下:數字開頭,緊接着下劃線或者點或者頓號.......
2.2 幾個實際案例:
2.2.1 兩個數字開頭後面是一個點:SELECT * from tb_smusic WHERE name REGEXP "^[0-9]{1,3}[.]"
2.2.2 兩個數字開頭後,面空格,下劃線,空格:SELECT * from tb_smusic WHERE name REGEXP "^[0-9]{1,3}[ ][_][ ]"
2.2.3 接下來就是把原來的名字換成去掉目標字符之後的名字了。這裏可能要用到存儲函數或者存儲過程,這一塊用之前有學過,但是一直沒用過。所以最後選擇java+jdbc來做。
3.解決方案
3.1 主要的邏輯就是按照前面的正則匹配的方式把目標字符找出來,然後按照按照正則的規則切割,再然後就是更新就好了。就是一個select和一個update。上代碼:
import com.booyue.spider.spider.mapper.baby_mvc.TbSmusicMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@RunWith(SpringRunner.class)
@SpringBootTest
public class BabyMvcTest {
@Autowired
private TbSmusicMapper tbSmusicMapper;
@Autowired
private JdbcTemplate jdbcTemplate;
String pattern1 = "^[0-9]{1,5}[.]";
String pattern2 = "^[0-9]{1,5}[、]";
String pattern3 = "^[0-9]{1,3}[ ][_][ ]";
String pattern4 = "^[0-9]{1,5}[ ]";
String pattern5 = "^[0-9]{1,5}[_]";
String pattern6 = "^[0-9]{1,5}";
final String defaultPattern=pattern1;
@Test
public void getTbSmusicItem() {
String selectSql=
"select tb_smusic.id,tb_smusic.name \n" +
"from \n" +
"tb_smusic,tb_sspecial,tb_sspecial_music \n" +
"WHERE\n" +
" tb_sspecial.id=tb_sspecial_music.special_id \n" +
"AND\n" +
" tb_sspecial_music.music_id=tb_smusic.id\n" +
"AND tb_sspecial.id IN (\n" +
"1010,1011,1012,1014,1019,1028,1037,1038,1043,1048,1049,1050,1060,\n" +
"1061,1062,1064,1065,1066,1067,1101,1102,1103,1104,1105,1106,\n" +
"1111,1112,1113,1114,1115,1116,1117,1118,1120,1121,1122,\n" +
"1123,1124,1125,1126,1127,1128,1130,1151,1157,111174,1175,1176,\n" +
"1181,1182,1183\n" +
")";
String updateSql="update tb_smusic set name =? ,origin_name=? where id=?";
SqlRowSet set = jdbcTemplate.queryForRowSet(selectSql);
while (set.next()) {
Integer id = set.getInt(1);
String name = set.getString(2);
Pattern pattern = Pattern.compile(defaultPattern);
Matcher matcher = pattern.matcher(name);
if(matcher.find())
{
System.out.println(id);
System.out.println(name);
int end = matcher.end();
String[] ss = name.split(defaultPattern, end);
for (String s:ss) {
jdbcTemplate.update(updateSql,s,name,id);
}
}
}
}
}