-
MySQLで日付を条件にレコードを検索する方法をわかりやすく解説
はじめにMySQLのテーブルに保存された日付(DATE型)の値を条件として、特定のレコードを抽出したいケースはよくあります。この記事では、サンプルテーブル「detail_bday」を使いながら、日付によるレコード検索の基本的な方法を2通り紹介します。サンプルデータの確認まず、以下のような誕生日情報を持つテーブル「detail_bday」を用意します。mysql> Select * from detail_bday; +----+---------+------------+ | Sr | Name | Birth_Date | +----+---------+-----------
-
UPDATE文のSET句でサブクエリが行を返さない場合、MySQLはNULLを返す
UPDATE文のSET句のサブクエリが行を返さない場合、MySQLはNULLを返すUPDATEステートメントのSET句で新しい値を割り当てるために使用したサブクエリが、1行も行を返さなかった場合、MySQLはその列にNULL値を代入します。以下の例でその動作を実際に確認してみましょう。サンプルテーブルの確認まず、今回使用する「student」テーブルと「info」テーブルの内容を確認します。mysql> Select * from student; +----+---------+-----------+ | Id | Name | grade | +----+-----
-
MySQLの同じテーブルに固定長文字列と可変長文字列を保存する方法
MySQLでは、CHAR型は固定長の文字列を格納するために使用され、VARCHAR型は可変長の文字列を格納するために使用されます。したがって、1つのカラムをCHAR型、別のカラムをVARCHAR型として定義することで、同じテーブル内に固定長文字列と可変長文字列の両方を保存することができます。CHAR型とVARCHAR型の違いCHAR型は、宣言された長さに満たない文字列を末尾の空白で埋めて固定長として保存します。一方、VARCHAR型は実際に入力された文字数に応じて必要な分だけ領域を使用するため、データの長さが不定の場合に適しています。例以下のように、FirstNameカラムをCHAR型、Las
-
MySQLにおけるSERIALとAUTO_INCREMENTの違いとは?
MySQLでは、SERIALとAUTO_INCREMENTはどちらもフィールドのデフォルト値として連番(シーケンス)を自動生成するために使われますが、両者は技術的には異なるものです。それぞれの特徴と違いを、実際の実行例とともに解説します。AUTO_INCREMENTの特徴AUTO_INCREMENT属性は、BIT型とDECIMAL型を除くすべての数値データ型で利用できます。ただし、1つのテーブルに設定できるAUTO_INCREMENT列は1つだけであり、あるテーブルで生成されたシーケンスを他のテーブルで使い回すことはできません。また、この属性を使用するには対象の列にUNIQUEインデックスが必
-
MySQLのUPDATE文ひとつで複数行の列値をまとめて更新する方法
MySQLのUPDATE文で複数行を更新する仕組みMySQLでは、UPDATEステートメントのWHERE句に指定した条件が複数の行に一致した場合、SET句の内容がその一致したすべての行に対して適用されます。つまり、単一のUPDATE文を実行するだけで、複数行の列値を一度に更新することが可能です。サンプルテーブルの準備ここでは、次のような「tender」というテーブルを使って具体的に見ていきましょう。mysql> Select * from tender; +-----------+---------+------+ | tender_id | company | rate | +---
-
MySQLでテーブルの値を更新する方法|UPDATE文とWHERE句の基本
MySQLでテーブルの値を更新するには? MySQLでは、UPDATE文とWHERE句を組み合わせることで、テーブル内の1行または複数行の値を更新できます。UPDATE文は、WHERE句で指定した条件に一致する行だけを対象に処理を実行するため、意図したレコードだけを安全に書き換えることが可能です。 UPDATE文の基本的な構文 UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件; SETの後に更新したいカラムと新しい値を指定し、WHEREの後に更新対象を絞り込む条件を記述します。 具体例:特定の従業員データを更新する 例として、「empl
-
MySQLのFROM_UNIXTIME()関数で日時値を数値形式で取得する方法
MySQLでは、日時(DATETIME)値に0を加算する(+0)ことで、その値を整数へ変換できます。これと同じ手法を使えば、FROM_UNIXTIME()関数が返す日時値も数値形式に変換することが可能です。以下の例で具体的な動作を確認してみましょう。mysql> Select FROM_UNIXTIME(1555033470)+0 AS Date in Numeric Format; +------------------------+ | Date in Numeric Format | +------------------------+ | 20190412071430.00000
-
MySQLのSTR_TO_DATE()関数とは?文字列を日付値に変換する使い方を解説
MySQLのSTR_TO_DATE()関数とはSTR_TO_DATE()関数は、文字列の値を指定した書式に従って日付・日時(DATETIME)値に変換するためのMySQL組み込み関数です。変換対象となる文字列と、その文字列がどのような形式で表現されているかを示す書式文字列の、2つの引数を渡す必要があります。この関数を使うことで、「20172810」のように一見すると日付に見えない文字列でも、正しい順序で書式を指定すれば「2017-10-28」という有効な日付値として扱えるようになります。基本構文STR_TO_DATE(string, format)string: 日付・日時値に変換したい元の文
-
MySQLのINSERT文でデフォルト値を指定する方法をわかりやすく解説
テーブルを作成する際に、あるカラムに対してデフォルト値(初期値)が定義されている場合、INSERT文の中で DEFAULT キーワードを使用すると、そのカラムに自動的にデフォルト値を挿入することができます。 デフォルト値を持つテーブルの作成例 まず、「doj」(入社日)カラムにデフォルト値「2005-01-01」を設定した「employee」テーブルを作成します。 mysql> Create table employee(id int, name varchar(20), doj date DEFAULT 2005-01-01); Query OK, 0 rows affected (0
-
MySQLのSTR_TO_DATE()関数に無効な文字列を渡すとどうなる?NULLと警告の挙動を解説
STR_TO_DATE()関数に無効な文字列を渡した場合の挙動STR_TO_DATE()関数に無効な文字列を引数として渡すと、MySQLは結果としてNULLを返し、それと同時に警告(Warning)を出力します。以下に具体的な例を示します。mysql> Select STR_TO_DATE('20173210', '%Y%d%m'); +-----------------------------------+ | STR_TO_DATE('20173210', '%Y%d%m') | +-------------------
-
STR_TO_DATE()関数に渡した日付文字列とフォーマット文字列が一致しない場合、MySQLは何を返すのか?
フォーマット文字列と日付文字列が一致しない場合のMySQLの動作MySQLのSTR_TO_DATE()関数において、指定されたフォーマット文字列と引数として渡された日付文字列が一致しない場合、MySQLはNULL値を戻り値として返し、同時に警告(Warning)を出力します。以下に具体的な例を示します。例1:区切り文字の不一致mysql> Select STR_TO_DATE(20172810, %Y,%d%m); +------------------------------------+ | STR_TO_DATE(20172810, %Y,%d%m) | +------------
-
MySQLで2つの日付間の年・月・日・時・分・秒の期間を計算する関数を作成する方法
MySQLでは、2つの日付間の経過時間を「○年○ヶ月○日○時間○分○秒」という読みやすい形式で求めるユーザー定義関数を作成できます。ここでは、TIMESTAMPDIFF や CONCAT などの組み込み関数を活用し、年・月・日・時・分・秒ごとの差分を算出する Duration 関数の実装方法を解説します。 Duration関数の作成 まず、同名の関数が既に存在する場合は削除しておき、DELIMITER を変更したうえで関数を定義します。この関数は2つの DATETIME 型の値を受け取り、整形された期間文字列を CHAR(128) 型で返します。内部では TIMESTAMPDIFF で年・月・
-
MySQLのGET_FORMAT()関数をDATE_FORMAT()・STR_TO_DATE()関数と組み合わせる方法
MySQLのGET_FORMAT()関数は、DATE_FORMAT()関数やSTR_TO_DATE()関数と組み合わせて使うと非常に便利です。GET_FORMAT()関数は、国や地域ごとの標準的な日付・時刻の書式文字列を返すため、これらの関数と併用することで、日付データの整形や解析を柔軟かつ簡潔に行えます。DATE_FORMAT()関数との組み合わせGET_FORMAT()関数をDATE_FORMAT()関数と組み合わせると、特定の日付・時刻・日時を、GET_FORMAT()関数が返す書式に従って整形して表示できます。mysql> Select DATE_FORMAT(2017-10-2
-
MySQLのGET_FORMAT()関数とは?使い方と実例をわかりやすく解説
MySQLのGET_FORMAT()関数は、第2引数に指定した標準フォーマットに基づいて、DATE型・TIME型・DATETIME型・TIMESTAMP型などに対応する書式指定文字列(フォーマットコード)を返す関数です。標準フォーマットには「EUR」「INTERNAL」「ISO」「JIS」「USA」の5種類を指定できます。 この関数が返すフォーマットコードはDATE_FORMAT()関数で使用されるものと同一のため、DATE_FORMAT()やSTR_TO_DATE()と組み合わせて利用すると特に便利です。国や地域ごとに異なる日付・時刻の表記に対応させたい場合に役立ちます。 構文 GET_FO
-
MySQLでGROUP BYの結果にグループレベルのフィルタリング条件を適用する方法(HAVING句の使い方)
MySQLでは、SELECT文のGROUP BY句を使用することで、返される結果セットを特定の列の値に基づいてグループに分割できます。しかし、すべてのグループではなく、特定の条件を満たすグループだけを取得したい場合もあります。 このような場合は、GROUP BY句と組み合わせてHAVING句を使うことで、グループレベルでのフィルタリングが可能になります。WHERE句が個々の行に対して条件を適用するのに対し、HAVING句は集計後のグループに対して条件を適用する点が大きな特徴です。 HAVING句によるグループフィルタリングの例 例として、従業員情報を格納した「employees」テーブルを考え
-
MySQLのGROUP BY句を使って結果セットをグループに分割する方法
```html MySQLのSELECT文でGROUP BY句を使用すると、結果セットをグループに分割することができます。GROUP BY句では、グループ化の基準となる列を指定します。指定した列で同じ値を持つ行は、1つのグループとしてまとめられます。これにより、SELECT文が返す結果セットが複数のグループに整理されます。 具体例 以下の例で、GROUP BY句の動作を確認してみましょう。 まず、「employees(従業員)」というテーブルがあるとします。 mysql> Select * from employees; +------+-------------+-------
-
UnixタイムスタンプからMySQLのタイムスタンプ値へ変換する方法
概要MySQLでは、FROM_UNIXTIME()関数を使うことで、Unixタイムスタンプ(1970年1月1日からの経過秒数)をTIMESTAMP型やDATETIME型の日時値に簡単に変換できます。基本的な使い方mysql> SELECT FROM_UNIXTIME(1508622563); +-----------------------------+ | FROM_UNIXTIME(1508622563) | +-----------------------------+ | 2017-10-22 03:19:23 | +---------------------
-
MySQLで日付・時刻の処理をDATE_FORMAT()関数に任せる方法
MySQLでは、DATE_FORMAT()関数を利用することで、日付や時刻の処理(フォーマット変換)をデータベース側に任せることができます。この関数は、引数として渡したフォーマット指定子に基づいて、値を整形して返します。 日付のみを取り出す例 日付に関するフォーマット指定子をDATE_FORMAT()関数に渡すと、MySQLは日付部分だけを処理して返します。 mysql> SELECT DATE_FORMAT(2017-10-22 13:03:45, %Y %M %D) AS OFFLOADED DATE; +-------------------+ | OFFLOADED DATE
-
MySQLのTIME_FORMAT()関数で時刻値をフォーマットする方法
TIME_FORMAT()関数とはMySQLのTIME_FORMAT()関数は、DATE_FORMAT()関数とよく似た使い方ができる関数ですが、フォーマットできるのは時刻値のみという点が異なります。もし日付値に対してTIME_FORMAT()関数を使用すると、MySQLはエラーではなくNULLを返すので注意が必要です。時刻形式の指定子を使った例時刻に関連する書式指定子(%h、%i、%s、%pなど)を引数として渡すと、日時データから時刻部分だけが抽出され、指定した形式に整形されます。mysql> Select TIME_FORMAT("2017-10-22 13:03:45&q
-
MySQLで特定の日付から月と日を抽出する2つの方法
MySQLでは、日付(DATE型やTIMESTAMP型)の値から「月」や「日」だけを取り出したい場面がよくあります。この記事では、その代表的な2つの方法を、実際のSQL実行例とともにわかりやすく解説します。方法1:EXTRACT()関数を使うEXTRACT()関数は、MySQLの日付・時刻値から任意の部分(年、月、日、時、分など)を抽出できる汎用的な関数です。引数に「Month」や「day」などの単位を指定することで、目的の値を簡単に取得できます。以下は、指定した日付「2017-10-22」から月と日をそれぞれ取得する例です。mysql> Select EXTRACT(Month fro