2017-12-28 31 views
0

これは私の最初の質問です。ご協力いただきありがとうございます。文字列から日付を表示

多くの列を持つ古いデータベースがありますが、これはDATE列ではありません。はい、間違いです。

しかし、私は最初の4桁がYYYYあり、次の2桁はMMであり、次の2はDDです

2017113020440370769 

のように、日付と時刻が含まれている、いくつかのデータをquestion_idを柱と呼ばれています。

私はこれらの文字を抽出して、特定の日付にいくつの質問があったかをカウントしようとしています。

私は可能性があり、特定の日付のためにこれをやって:

SELECT COUNT(*) 
FROM questions 
WHERE question_id LIKE '20171228%'; 

をしかし、私はTODAYのためにこれを自動化したい、日々、毎日YYYYMMDD%の

を入力していないが、それは可能ですか? CURDATEを使用していますか?または、私が使用できるTIMESTAMPがありますか?

ありがとうございました!

+0

参照をなぜ私は非常に単純なSQLクエリであると思われるのかMCVEを提供する必要があります(http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcv簡単なSQLクエリーのようなもの) – Strawberry

+0

正規表現で日付を抽出すると、それをグループ化する結果セットの一部として使用することができます。実際に日付フィールドを追加することをお勧めします(MySQLにはタイムスタンプを自動的に設定する機能はありませんか?)そして、既存の空のタイムスタンプを一度更新してください。しかし、実際にそれを行うには小さなテーブルで行う必要があります。スキーマやサンプルデータがなければ、私はそれを答えにすることはできません。 –

答えて

0

はい、それは可能です、あなたは以下のようにワイルドカードを使用して、現在の日付を構築することができます

特定の日のためだ
SELECT COUNT(*) 
FROM questions 
WHERE question_id LIKE CONCAT(DATE_FORMAT(CURDATE(), '%Y%m%d'), '%'); 

。今日。あなたは下図のようquestion_idの日付部分に集約を行う必要がありますすべての日付の場合:

SELECT SUBSTR(question_id,1,8) ASKED_ON, COUNT(*) NUMBER_OF_QUESTIONS 
FROM questions 
GROUP BY SUBSTR(question_id,1,8); 
+1

ありがとう、それは完璧に働いた! – Bigote

0
  • あなたは、例えば、今日の日付を取得することができますCURDATE()
  • あなたは詐欺CONCAT()

もので、文字列を連結DATE_FORMAT()

  • で日付をフォーマットすることができ、あなたが;-)

  • 0

    を必要とするすべてのレンガは、この試してみてくださいされています[

    SELECT LEFT('20171228ASD',8) = CURRENT_DATE(); 
    
    
    SELECT COUNT(*) 
    FROM questions 
    WHERE LEFT(question_id',8) = CURRENT_DATE(); 
    
    関連する問題