Jim*_*Fan 6 mysql base64 substring text-manipulation string-function
我的数据库中有一个编码的字段.在字段上使用from_base64之后,它看起来像这样:
<string>//<string>//<string>/2017//06//21//<string>//file.txt
Run Code Online (Sandbox Code Playgroud)
在路径的开头可能存在未确定数量的字符串,但是,日期(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>';
Run Code Online (Sandbox Code Playgroud)
摘要
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;
Run Code Online (Sandbox Code Playgroud)
假设
现在假设在问题中给出的例子中一年前的单斜线是一个拼写错误,应该是双斜线.(如果事实证明并非如此,我会更新我的答案.)