質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

3224閲覧

MySQLで文字列を日にちに変換したい

trafalbad

総合スコア303

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2018/01/14 08:24

編集2018/01/14 08:42

次のようなINSERT文で作ったテーブルがあります

SQL

1CREATE TABLE login_log 2(user_id INTEGER, 3 timestamp VARCHAR(13)); 4 5INSERT INTO login_log VALUES (10001, '3/19/16 15:50'), 6 (10001, '3/20/16 0:20'), 7 (10001, '3/23/16 14:10'), 8 (10001, '3/24/16 0:15'), 9 (10002, '3/21/16 12:50'), 10 (10003, '3/23/16 11:00'), 11 (10003, '3/24/16 9:10'), 12 (10003, '3/24/16 11:20');

このtimestamp列を日にちに変換して日毎に集計しようとしましたが。次のコードでうまく行きません。多分DATA_FORMATの部分がおかしいと思うのですが、何が間違っているのでしょうか?ご教授お願いします

SQL

1SELECT DATE_FORMAT(timestamp,'%m-%d-%Y') AS day, 2COUNT(*) 3FROM login_log 4GROUP BY day;

結果
day COUNT(*)
(null) 8

追記
このデータベースは元からあるもので、このテーブルの内容は変更できないとして、varchar (またはCHAR型)をdata型に変換して日毎に集計することが目的です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

timestamp VARCHAR(13));

日付をvarchar で定義していることが間違いです。
datetime 型、timestamp型で定義すべきです。

sql

1SELECT DATE_FORMAT(STR_TO_DATE(`timestamp`, '%c/%e/%y %H:%i'), '%d-%m-%Y') FROM login_log

投稿2018/01/14 08:36

編集2018/01/14 09:11
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trafalbad

2018/01/14 08:40

もともと文字列型のものをdatetime型に変更したいんです。ようはこのデータベースは元からあるもので、このテーブルの内容は変更できないとして、varchar (またはCHAR型)をdata型に変換して日毎に集計したい場合どうすればいいのでしょうか?
退会済みユーザー

退会済みユーザー

2018/01/14 09:01

STR_TO_DATE 関数を使って変換ですね。
trafalbad

2018/01/14 09:26

解決しました、ありがとうございます!
guest

0

こんにちは。

以下でいかがでしょうか?

sql

1SELECT COUNT(*), LEFT(timestamp, 4) AS day 2FROM login_log 3GROUP BY day

上記を実行すると、以下のようになりました。(phpMyAdminの画面キャプチャです)

イメージ説明

参考になれば幸いです。

投稿2018/01/14 09:01

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/14 09:04

10月〜12月に対応できないですよ。
jun68ykt

2018/01/14 09:08

質問には、 ==================================== 次のようなINSERT文で作ったテーブルがあります CREATE TABLE login_log (user_id INTEGER, timestamp VARCHAR(13)); INSERT INTO login_log VALUES (10001, '3/19/16 15:50'), (10001, '3/20/16 0:20'), (10001, '3/23/16 14:10'), (10001, '3/24/16 0:15'), (10002, '3/21/16 12:50'), (10003, '3/23/16 11:00'), (10003, '3/24/16 9:10'), (10003, '3/24/16 11:20'); ==================================== と書いてあるので、 > 10月〜12月に対応 というのは与件の範囲外という認識でした。
trafalbad

2018/01/14 09:27

回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問