SQL練習問題 – 問18

この記事は2016年8月26日に書かれたものです。内容が古い可能性がありますのでご注意ください。


SQLの練習問題です。

筆者の環境は以下となっていますが、別のデータベースやツールでもほとんど同じように動作すると思います。

  • MariaDB 5.5.48
  • MySQL Workbench 6.3 ← 現在、お試し期間中です。

よくわからないという方は、XAMPをインストールすると簡単に筆者と同じ環境を構築できます。以下のサイトで紹介されています。
WINDOWS XAMPP にて LARAVEL をインストール (XAMPP V1.8.3インストール)

問題として使用するデータは以下からダウンロード可能です。phpMyAdminからデータベース(worldcup2014)を作成しインポートしておいてください。
worldcup2014.zip

※データの誤りがありましたので、既にインポートされた方も改めて再インポートをお願いします。※ 2016/07/15


問題:ブラジル(my_country_id = 1)対クロアチア(enemy_country_id = 4)戦のキックオフ時間(現地時間)を表示してください。

ただし、DB上に保持されているキックオフ時間は日本時間であるため、日本と現地の時差であるマイナス12時間をして表示すること。
表示するカラム
・キックオフ時間(現地)
・キックオフ時間(日本)

WS000014

正解:

回答1:

SELECT p.kickoff, ADDTIME(p.kickoff, '-12:00:00') AS kickoff_jp
FROM pairings p
WHERE p.my_country_id = 1 AND p.enemy_country_id = 4;

回答2:

SELECT p.kickoff, SUBTIME(p.kickoff, '12:00:00') AS kickoff_jp
FROM pairings p
WHERE p.my_country_id = 1 AND p.enemy_country_id = 4;

回答3:

SELECT p.kickoff, DATE_ADD(p.kickoff, INTERVAL '-12' HOUR) AS kickoff_jp
FROM pairings p
WHERE p.my_country_id = 1 AND p.enemy_country_id = 4;

回答4:

SELECT p.kickoff, DATE_SUB(p.kickoff, INTERVAL '12' HOUR) AS kickoff_jp
FROM pairings p
WHERE p.my_country_id = 1 AND p.enemy_country_id = 4;

回答5:

SELECT p.kickoff, ADDDATE(p.kickoff, INTERVAL '-12' HOUR) AS kickoff_jp
FROM pairings p
WHERE p.my_country_id = 1 AND p.enemy_country_id = 4;

回答6:

SELECT p.kickoff, SUBDATE(p.kickoff, INTERVAL '12' HOUR) AS kickoff_jp
FROM pairings p
WHERE p.my_country_id = 1 AND p.enemy_country_id = 4;

日付時刻型のデータを12時間分マイナスする必要があります。
公式HPの関数リファレンスによるとざっと見ただけで6種類の方法がありました。

ADDTIME(), SUBTIME()
DATE_ADD(), DATE_SUB()
ADDDATE(), SUBDATE()

https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html#function_date-add

ADD系の関数の場合には、マイナス記号を付ける必要がありますが
使用感に関してはほとんど違いがないようです。

← SQL練習問題 一覧まとめに戻る

  • このエントリーをはてなブックマークに追加

PAGE TOP