mysqlの誕生日にはどのような型が使用されますか?

青灯夜游
リリース: 2022-11-11 16:24:19
オリジナル
8385 人が閲覧しました

mysql で利用可能な誕生日のタイプ: 1. DATE タイプ、表現できる日付形式は「YYYY-MM-DD」で、保存に 3 バイトが必要です; 2. DATETIME タイプ、日付形式は表現できる日付形式は「YYYY-MM-DD HH:MM:SS」で、格納時に8バイト必要です; 3. TIMESTAMP型、表現できる日付形式は「YYYY-MM-DD HH:MM:SS」です、保存時は4バイト必要です。

mysqlの誕生日にはどのような型が使用されますか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL の誕生日に適した日付と時刻のタイプ

タイプ名 日付形式 日付範囲 ストレージ要件
DATE YYYY-MM-DD 1000- 01-01 ~ 9999-12-3 3 バイト
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 バイト
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 バイト

DATE 型

DATE 型は、時刻部分を除いて日付値のみが必要な場合に使用され、格納に 3 バイトが必要です。日付形式は「YYYY-MM-DD」です。YYYY は年、MM は月、DD は日を表します。

DATE 型フィールドに値を割り当てる場合、DATE の日付形式に準拠していれば、文字列型または数値型のデータを挿入できます。以下に示すように:

  • 「YYYY-MM-DD」または「YYYYMMDD」文字の形式で表される日付。値の範囲は「1000-01-01」~「9999」です。 - 12-3'。たとえば、「2015-12-31」または「20151231」と入力すると、データベースに挿入される日付は 2015-12-31 になります。

  • 日付を「YY-MM-DD」または「YYMMDD」文字列形式で表します。YY は 2 桁の年の値を表します。 MySQL は 2 桁の年の値のルールを解釈します。「00 ~ 69」の範囲の年の値は「2000 ~ 2069」に変換され、「70 ~ 99」の範囲の年の値は「2000 ~ 2069」に変換されます。 「1970年〜1999年」。たとえば、「15-12-31」と入力すると、データベースに挿入される日付は 2015-12-31 になり、「991231」と入力すると、データベースに挿入される日付は 1999-12-31 になります。

  • YYMMDD 数値形式で表現された日付は前と同様で、00 ~ 69 の範囲の年の値は 2000 ~ 2069 に変換され、年の値は 2000 ~ 2069 に変換されます。 80~99の範囲は1980~1999に変換されます。たとえば、「151231」と入力すると、データベースに挿入される日付は 2015-12-31 になり、「991231」と入力すると、データベースに挿入される日付は 1999-12-31 になります。

  • 現在のシステム日付を挿入するには、CURRENT_DATE または NOW() を使用します。

ヒント: MySQL では「緩和された」構文が許可されています。任意の句読点を日付部分間の区切り文字として使用できます。たとえば、「98-11-31」、「98.11.31」、「98/11/31」、および「98@11@31」は同等であり、これらの値はデータベースに正しく挿入されます。

DATETIME 型

DATETIME 型は、日付と時刻の情報の両方を含む必要があり、格納に 8 バイトを必要とする値に使用されます。日付形式は「YYYY-MM-DD HH:MM:SS」です。ここで、YYYY は年、MM は月、DD は日、HH は時、MM は分、SS は秒を表します。

##DATETIME 型のフィールドに値を割り当てる場合、以下に示すように、DATETIME の日付形式に準拠している限り、文字列型または数値型のデータを挿入できます。

#「YYYY-MM-DD HH:MM:SS」または「YYYYMMDDHHMMSS」の文字列形式で表される日付。値の範囲は「1000-01-01 00:00:00」~」です。 9999-12-3 23:59:59」。たとえば、「2014-12-31 05:05:05」または「20141231050505」と入力すると、データベースに挿入される DATETIME 値は 2014-12-31 05:05:05 になります。
  • 「YY-MM-DD HH:MM:SS」または「YYMMDDHHMMSS」文字列形式で表される日付。YY は 2 桁の年の値を表します。先ほどと同様に、「00~79」の範囲の年の値は「2000~2079」に変換され、「80~99」の範囲の年の値は「1980~1999」に変換されます。たとえば、「14-12-31 05:05:05」と入力すると、データベースに挿入される日時は 2014-12-31 05:05:05 となり、141231050505 と入力すると、データベースに挿入される日時は 2014 になります。 -12-31 05:05:05 。
  • YYYYMMDDHHMMSS または YYMMDDHHMMSS 数値形式で表される日付と時刻。たとえば、20141231050505 と入力すると、データベースに挿入される DATETIME は 2014-12-31 05:05:05 になり、140505050505 と入力すると、データベースに挿入される DATETIME は 2014-12-31 05:05:05 になります。
  • ヒント: MySQL では「緩和された」構文が許可されています。任意の句読点を日付部分または時刻部分の間の区切り文字として使用できます。たとえば、「98-12-31 11:30:45」、「98.12.31 11 30 35」、「98/12/31 11*30*45」、「98@12@31 11^30^45」などです。同様に、これらの値はデータベースに正しく挿入できます。

TIMESTAMP型

TIMESTAMPの表示形式はDATETIMEと同じで、表示幅は19文字固定、日付形式はYYYYです。 MM-DD HH:MM : SS、ストレージに 4 バイトが必要です。ただし、TIMESTAMP カラムの値の範囲は、DATETIME の値の範囲である '1970-01-01 00:00:01'UTC ~ '2038-01-19 03:14:07'UTC よりも小さくなります。データを挿入するときは、それが正当な値の範囲内であることを確認してください。

ヒント: 協定世界時 (英語: Coowned Universal Time、フランス語: Temps Universel Coordonné) は、世界統一時、世界標準時、および国際協定時とも呼ばれます。英語 (CUT) とフランス語 (TUC) の略称は異なるため、妥協案として略称は UTC になります。

TIMESTAMP と DATETIME、ストレージ バイトとサポートされる範囲の違いに加えて、最大の違いは次のとおりです。

DATETIME 日付データを保存する場合、次に従って保存されます。つまり、タイム ゾーンに関係なく、入力された内容はすべて保存されます。
  • TIMESTAMP 値は UTC (世界標準時) 形式で保存され、保存されます。現在のタイムゾーンに正しく変換し、取得時に現在のタイムゾーンに再変換します。つまり、クエリ時に表示される時刻値は、現在のタイムゾーンに応じて異なります。

ヒント: DATE 値を DATETIME または TIMESTAMP オブジェクトに割り当てると、結果の値の時刻部分が '00:00:00' に設定されるため、DATE 値は時間情報は含まれていません。 DATE オブジェクトに DATETIME または TIMESTAMP 値が割り当てられている場合、結果の値の時刻部分が削除されるため、DATE 値には時刻情報が含まれません。

#時刻と日付の関数

  • ##システム時刻関数 now()、current_timestamp、sysdate ( )

  • これら 3 つの関数はすべてシステム時刻を返すことができます。その違いを参照してください。これらの 3 つの関数に同時にアクセスすると同じ結果が得られますが、数秒後、結果は異なりました。

mysqlの誕生日にはどのような型が使用されますか?上の図は、sysdate() によって返される時刻が now() の current_timestamp とは異なり、2 秒遅いことを示しています。その理由は次のとおりです。

#current_timestamp は同義語になり、この 2 つは実際には同じです;

sysdate() 関数は現在の関数が実行された時刻を返し、now() は SQL ステートメントが実行された時刻を返します;

    時間の加算および減算関数
  • ① date_add および date_sub
date_add(date,間隔式単位) と date_sub(日付, 間隔式式単位) はそれぞれ増加と減少を表します。

select
date_add('2017-12-18 22:51:00', interval 1 second),
date_add('2017-12-18 22:51:00', interval 1 minute),
date_add('2017-12-18 22:51:00', interval 1 hour),
date_add('2017-12-18 22:51:00', interval 1 day),
date_add('2017-12-18 22:51:00', interval 1 month),
date_add('2017-12-18 22:51:00', interval 1 year);
ログイン後にコピー

閏月が発生したときに date_add を処理するにはどうすればよいですか? MySQL は、閏月の場合は 2 月 29 日を返し、閏月でない場合は 2 月 28 日を返します。

select date_add('2016-02-29 22:51:00', interval -1 year),
date_add('2016-02-29 22:51:00', interval 4 year);
ログイン後にコピー
2015-02-28 22:51:002020-02-29 22:51:00
ログイン後にコピー

② datediff と timediff

datediff(date1,date2): 2 つの日付 date1 - date2 を減算し、日数を返します。 select datediff('2016-02-29 22:51:00','2016-03-29 22:51:00');
  • timediff(time1,time2):two 減算各日付から time1 - time2 を計算し、時差を返します (形式: 838:59:59)。 select timediff('2016-02-29 22:51:00','2016-01-29 22:51:00');

  • 注: timediff(time1,time2)関数の 2 つのパラメーターは同じ型である必要があります。

  • ③ タイムスタンプの増減、変換関数

timestamp(date)
    -- 日付からタイムスタンプへの変換関数
  • timestamp(date, time)

    -- 日付時刻

  • timestampadd(unit,interval,datetime_expr)

    -- date_add と同様, 単位ごとに時間を増やしたり減らしたりします。

    select timestampadd(second, 60, '2017-12-18 00:00:00');
    select timestampadd(minute, 60, '2017-12-18 00:00:00');
    select timestampadd(hour, 60, '2017-12-18 00:00:00');
    ログイン後にコピー
  • timestampdiff(unit,datetime_expr1,datetime_expr2)

    --2 つの時間の差を計算します。 , 秒、分、時、日、月、年、週を計算できます

    select timestampdiff(second, '2017-12-18 00:00:00','2017-12-18 12:00:00');
    select timestampdiff(hour, '2017-11-18 00:00:00','2017-12-18 12:00:00');
    select timestampdiff(day, '2017-10-17 00:00:00','2017-11-18 23:00:00');
    ログイン後にコピー
  • ④ date_format 関数

date_format 関数は主に日付の書式設定に使用されます

select date_format(now(),'%Y%m%d'),
date_format(now(),'%Y-%m-%d'),
date_format(now(),'%Y/%m/%d'),
date_format(now(),'%m/%d/%Y');
ログイン後にコピー

注: データのクエリ時に日付フィールドにこの関数を使用すると、オプティマイザーはフィールドのインデックスを使用せず、インデックスを介してデータをクエリすることもできないため、クエリ効率が非常に低くなります。 、次のクエリ ステートメントでは、フィールドbirth_date インデックスがある場合、date_format 関数の使用によりインデックスは無効になります:

select *
from employees
where date_format(birth_date,'%Y-%m-%d') = '1961-08-03';
ログイン後にコピー

日付に関する従来のプログラミングの問題ユーザーの生年月日に応じて、現在の日付を使用して、最新の誕生日 (過去および将来の誕生日を含む) を計算します。

-- 上一年,当年,下一年生日与当前时间差最小的年就是用户最近的生日
select emp_no,first_name,last_name,birth_date,today,if(last_diff<=cur_diff and last_diff<=next_diff, last,if(cur_diff
from
(
-- 计算当前时间与上一年,当年,下一年生日的时间差
select emp_no,first_name,last_name,birth_date,datediff(today,last) as last_diff,abs(datediff(today,cur)) as cur_diff,abs(datediff(today,next)) as next_diff,
last,cur,next,today
from
(
-- 用户最近的生日可能分布在前一年,当年,下一年。根据年度差year_diff计算上一年,当年,下一年用户的生日
select emp_no,first_name,last_name,birth_date,
DATE_ADD(birth_date,INTERVAL year_diff year) as cur,
DATE_ADD(birth_date,INTERVAL year_diff+1 year) as next,
DATE_ADD(birth_date,INTERVAL year_diff-1 year) as last,
today
from
(
-- 获取当前事前与出生日期的年度差 year_diff
select emp_no,first_name,last_name,birth_date,(year(NOW())-year(birth_date)) as year_diff, NOW() as today
from employees
) a
) b
) c
ログイン後にコピー

[関連する推奨事項:

mysql ビデオ チュートリアル

]

以上がmysqlの誕生日にはどのような型が使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート