2017-06-21 5 views
6

データベースにエンコードされているフィールドがあります。フィールド上from_base64使用した後は、それは次のようになります。パスの先頭に文字列の未知数があるかもしれませんMySQLでBase64でエンコードされた文字列の一部を取り出す方法は?

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

、しかし、日付(YYYY // MM // DD)は常に2つを持っています右のフィールド(ファイル拡張子に続く文字列)。

この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>'; 
+2

の作品自分のフィールドに検索したいテキストを区切ります。データには識別子(名前/値のペアまたはjsonまたはxml)がないため、クエリ内の文字列を解析するのにプロセッサが集中します。私はそれが最初の文章のタイプミスであると推測しています。あなたが提案した方法を使うことで、大きなパフォーマンスが見込まれます。デコードされた列を解析し、検索可能な情報をそれ自身の列に入れる更新を実行する方がはるかに高速です。 –

+0

行を挿入するときに日付を別の列として挿入しないのはなぜですか? – mikep

+0

2017年前の二重スラッシュではなく、単一のスラッシュですか? –

答えて

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; 

仮定

は今のところ想定されていることを、あなたがたの前に単一のスラッシュ質問で与えられた例のarはtypoであり、二重スラッシュであったはずです。 (それが判明した場合、これは私が私の答えを更新しますケースではありません。)

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),"-","/"); 
関連する問題