[英]How to extract part of a Base64 encoded string in MySQL?
我的數據庫中有一個編碼的字段。 在字段上使用from_base64之后,它看起來像這樣:
<string>//<string>//<string>/2017//06//21//<string>//file.txt
在路徑的開頭可能存在未確定數量的字符串,但是,日期(YYYY // MM // DD)將始終具有右側的兩個字段(字符串后跟文件擴展名)。
我想按此YYYY // MM // DD模式排序,並計算具有此日期的所有路徑的計數。
所以基本上我想這樣做:
select '<YYYY//MM//DD portion of decoded_path>', count(*) from table group by '<YYYY//MM//DD portion of decoded_path>' order by '<YYYY//MM//DD portion of decoded_path>';
摘要
MySQL的SUBSTRING_INDEX通過查找指定的分隔符並在指定負計數值時從末尾向后計數來實現此功能。
演示
Rextester演示: http ://rextester.com/TCJ65469
SQL
SELECT datepart,
COUNT(*) AS occurrences
FROM
(SELECT CONCAT(
LEFT(SUBSTRING_INDEX(txt, '//', -5), INSTR(SUBSTRING_INDEX(txt, '//', -5), '//') - 1),
'/',
LEFT(SUBSTRING_INDEX(txt, '//', -4), INSTR(SUBSTRING_INDEX(txt, '//', -4), '//') - 1),
'/',
LEFT(SUBSTRING_INDEX(txt, '//', -3), INSTR(SUBSTRING_INDEX(txt, '//', -3), '//') - 1))
AS datepart
FROM tbl) subq
GROUP BY datepart
ORDER BY datepart;
假設
現在假設在問題中給出的例子中一年前的單斜線是一個拼寫錯誤,應該是雙斜線。 (如果事實證明並非如此,我會更新我的答案。)
有點瘋狂但有效
select REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE('<string>//<string>//<string>/2017//06//21//<string>//file.txt',"//","-"),"/",-1),"-<",1),"-","/"), count(*) from `chaissilist` group by REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE('<string>//<string>//<string>/2017//06//21//<string>//file.txt',"//","-"),"/",-1),"-<",1),"-","/") order by REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE('<string>//<string>//<string>/2017//06//21//<string>//file.txt',"//","-"),"/",-1),"-<",1),"-","/");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.