如何在MySQL中提取部分Base64编码的字符串?

时间:2017-06-21 21:52:01

标签: mysql base64 substring text-manipulation string-function

我的数据库中有一个已编码的字段。在字段上使用from_base64后,它看起来像这样:

Codable

路径开头可能有不确定数量的字符串,但是,日期(YYYY // MM // DD)将始终有两个字段(字符串后跟文件扩展名)。

我希望按此YYYY // MM // DD模式排序,并计算具有此日期的所有路径的计数。

基本上我想这样做:

<string>//<string>//<string>/2017//06//21//<string>//file.txt

2 个答案:

答案 0 :(得分:5)

<强>摘要

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;

<强>假设

现在假设在问题中给出的示例中的一年之前的单斜线是一个拼写错误,应该是双斜线。 (如果事实证明并非如此,我会更新我的答案。)

答案 1 :(得分:1)

有点疯狂,但有效

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),"-","/");