SQL - 日付関数。 Transact-SQL 関数 日付を操作する SQL 関数
現在の日付と時刻を取得する
現在の日付 (時刻なし) を YYYY-MM-DD 形式で取得するには、次の関数を使用できます。
- CURDATE()
- 現在の日付()
現在時刻 (日付なし) を HH:MM:SS 形式で取得するには、次の関数を使用できます。
- 時間()
- 現在の時刻()
現在の日付と時刻を YYYY-MM-DD HH:MM:SS 形式で取得するには、次の関数のいずれかを使用できます。
- 今()
- SYSDATE()
- CURRENT_TIMESTAMP
例1
SELECT CURDATE(); または SELECT CURRENT_DATE();
結果: 2016-08-28
SELECT CURTIME(); または SELECT CURENT_TIME();
結果:19:29:54
今すぐ選択(); または SELECT SYSDATE(); または SELECT CURRENT_TIMESTAMP;
結果: 2016-08-28 19:29:54
時間間隔の加算と減算
日付と時刻を使用する場合、多くの場合、特定の日付に特定の時間間隔を加算または減算するという算術演算を実行する必要があります。 時間間隔を追加するには、次の 3 つの方法があります。
- 関数 DATE_ADD(original_date、INTERVAL式タイプ);
- 関数 ADDDATE(original_date, INTERVAL 式タイプ);
- 式:source_date + INTERVAL 式タイプ。
時間間隔の減算は、次の 3 つの方法でも行うことができます。
- 関数 DATE_SUB(source_date, INTERVAL 式タイプ);
- 関数 SUBDATE(source_date, INTERVAL 式タイプ);
- 式:source_date - INTERVAL 式タイプ。
ソースの日付特定の時間間隔を加算または減算した日付です。 表現– これは、テキスト形式で指定された、加算または減算された時間間隔そのものです。 タイプ– 追加する間隔のタイプを示す引数。 このオプションは、式を正しく解釈する方法を指定します。 たとえば、「3:24」という表現は、3 時間 24 分または 3 分 24 秒のいずれかとして解釈できます。 タイプ「MINUTE_SECOND」が指定されている場合、解釈は明確になります。 式と型引数の関係を表に示します。
例 2
次の 3 つのコマンドは同じ操作を実行します。 指定された時間に 1 秒を加えます。
SELECT "2016-09-10 23:59:59" + 間隔 1 秒;
SELECT ADDDATE("2016-09-10 23:59:59"、間隔 1 秒);
SELECT DATE_ADD("2016-09-10 23:59:59"、間隔 1 秒);
3 チームすべての結果は同じです: 2016-09-11 00:00:00。
例 3
次の 3 つのコマンドは、指定された日付からちょうど 1 年半前の日付を計算します。
SELECT DATE_SUB("2016-09-10 23:59:59"、間隔 "1-6" YEAR_MONTH);
SELECT SUBDATE("2016-09-10 23:59:59"、間隔 "1-6" YEAR_MONTH);
SELECT "2016-09-10 23:59:59" - 間隔 "1-6" YEAR_MONTH;
3 チームすべての結果は同じです: 2015-03-10 23:59:59。
他単位への換算機能
0 年目以降の経過日数として表される日付を操作すると便利な場合があります。日付をこの形式に変換して MySQL に戻すには、次の 2 つの関数があります。
- 今日の日付) – 日付引数に対応する日番号を返します。
- FROM_DAYS(day_number)– 日番号に従って日付を返します。
著者より:今日は SQL で日付関数がどのように機能するかについて説明します。 次の表は、使用可能なすべての重要な日付と時刻の関数のリストを示しています。 他にもさまざまな DBMS でサポートされているものがあります。 このリストは、MySQL DBMS で使用できる関数を表しています。
ADDDATE()。 日付を追加します
ADDTIME()。 時間を追加します
CONVERT_TZ()。 あるタイムゾーンから別のタイムゾーンに変換します
CURDATE()。 現在の日付を返します
CURRENT_DATE()、CURRENT_DATE。 CURDATE() の同義語
CURRENT_TIME()、CURRENT_TIME。 CURTIME() の同義語
CURRENT_TIMESTAMP()、CURRENT_TIMESTAMP。 NOW() の同義語
カータイム()。 現在時刻を返します
DATE_ADD()。 2 つの日付を追加します
DATE_FORMAT()。 指定された日付形式を設定します
DATE_SUB()。 ある日付から別の日付を減算します
日付()。 日付または日時を表す式から日付部分を抽出します。
DATEDIFF()。 ある日付から別の日付を減算します
日()。 DAYOFMONTH() の同義語
曜日名()。 曜日を返します
ダヨフモント()。 日付 (1 ~ 31) を返します。
曜日()。 引数の曜日のインデックスを返します。
DAYOFYEAR()。 その年の何日目かを返します (1 ~ 366)。
抽出する。 日付部分を取得します
FROM_DAYS()。 日数を日付に変換します
FROM_UNIXTIME()。 日付をUNIXタイムスタンプとしてフォーマットします。
時間()。 時間を取得します
LAST_DAY。 引数の月の最後の日を返します。
LOCALTIME()、LOCALTIME。 NOW() の同義語
LOCALTIMESTAMP、LOCALTIMESTAMP()。 NOW() の同義語
作成日()。 年と日から日付を作成します
時間を作ります。 時間を作ります()。 マイクロ秒()。 引数からマイクロ秒を返します
分()。 引数から分を返します
月()。 日付から月を返す
月名()。 月の名前を返します
今()。 現在の日付と時刻を返します
PERIOD_ADD()。 年月にピリオドを追加します
PERIOD_DIFF()。 期間間の月数を返します
四半期()。 引数から四半期を返します
SEC_TO_TIME()。 秒を「HH:MM:SS」形式に変換します
2番目()。 秒 (0 ~ 59) を返します。
STR_TO_DATE()。 文字列を日付に変換します
SUBDATE()。 3 つの引数を指定して呼び出された場合、DATE_SUB() シノニム
サブタイム()。 時間を減算します
SYSDATE()。 関数の実行時間を返します。
TIME_FORMAT()。 時刻形式を設定します
TIME_TO_SEC()。 引数を秒に変換して返します
時間()。 渡された式の時刻部分を抽出します。
TimeDiff()。 時間を減算します
タイムスタンプ()。 引数を 1 つ指定すると、この関数は日付または日時の式を返します。 2 つの引数の場合 - これら 2 つの引数を追加します
タイムスタンプパッド()。 日付と時刻の式に間隔を追加します。
タイムスタンプディフ()。 日時式から間隔を減算します。
TO_DAYS()。 日付引数を日数に変換して返します。
UNIX_TIMESTAMP()。 UNIX タイムスタンプを返します
UTC_DATE()。 現在の UTC 日付を返します
UTC_TIME()。 現在の UTC 時間を返します
UTC_TIMESTAMP()。 現在の UTC 日付と時刻を返します。
週()。 週番号を返します
平日()。 曜日のインデックスを返します
ウィーコフィイヤー()。 カレンダーの週番号 (1 ~ 53) を返します。
年()。 年を返します
年()。 年と週を返します
ADDDATE(日付,INTERVAL 式単位)、ADDDATE(式,日)
2 番目の引数を INTERVAL として指定して呼び出すと、ADDDATE() は DATE_ADD() の同義語になります。 関連関数 SUBDATE() は DATE_SUB() の同義語です。 INTERVAL ブロック引数の詳細については、「DATE_ADD()」を参照してください。
2 番目の引数を日数で指定して呼び出すと、MySQL はこれを式に追加する整数の日数として扱います。
ADDTIME(expr1,expr2)
ADDTIME() は expr2 を expr1 に加算し、結果を返します。 Expr1 は時刻式または日付時刻式であり、expr2 は時刻式です。
CONVERT_TZ(dt,from_tz,to_tz)
日付と時刻の値 dt を、from_tz で指定されたタイム ゾーンから to_tz で指定されたタイム ゾーンに変換し、結果の値を返します。 引数が無効な場合、この関数は NULL を返します。
CURDATE()
この関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在の日付を "YYYY-MM-DD" または YYYYMMDD 形式の値として返します。
CURRENT_DATE と CURRENT_DATE()
CURRENT_DATE と CURRENT_DATE() は CURDATE() の同義語です。
時間()
関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在時刻を「HH:MM:SS」または HHMMSS 形式の値として返します。 値は現在のタイムゾーンで表されます。
CURRENT_TIME と CURRENT_TIME()
CURRENT_TIME と CURRENT_TIME() は CURTIME() の同義語です。
CURRENT_TIMESTAMP および CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP と CURRENT_TIMESTAMP() は NOW() の同義語です。
日付(式)
日付または日時の式の日付部分を取得します。
DATEDIFF(expr1,expr2)
DATEDIFF() は、2 つの日付の間の日数として表現された expr1.expr2 を返します。 expr1 と expr2 は両方とも日付式または日時式です。 計算には日付部分のみが使用されます。
DATE_ADD(日付,INTERVAL式の単位)、DATE_SUB(日付,INTERVAL式の単位)
これらの関数は、日付の算術演算を実行します。 date は、開始日を示す DATETIME または DATE 値として表されます。 expr は、元の日付に加算または減算する間隔値を指定する式です。 expr は文字列です。 負の間隔の場合は「-」で始まる場合があります。
Unit は、式の測定単位を指定するキーワードです。 INTERVAL キーワードと単位表記では大文字と小文字が区別されません。 次の表は、各単位値に対する expr 引数の予期される形式を示しています。
QUARTER 値と WEEK 値は、バージョン 5.0.0 以降の MySQL で使用できます。
DATE_FORMAT (日付,形式)
このコマンドは、指定された形式文字列に従って日付値を形式設定します。 次のポインタはフォーマット行で使用できます。 フォーマットインジケーターの前には「%」文字を付ける必要があります。
%a。 曜日の短縮名 (Sun..Sat)
%b。 月の短縮名 (Jan..Dec)
%と。 月の数値指定 (0 ~ 12)
%D。 英語の接尾辞が付いた日付 (0、1、2、3、.)
%d。 日付の数値指定 (00..31)
%e。 日付の数値指定 (00..31)
%f。 マイクロ秒 (000000..999999)
%H。 時 (00..23)
%h。 時 (01..12)
%私。 時 (01..12)
%私。 分の数値指定 (00..59)
%J. 年間の日 (001..366)
%k。 時間 (0..23)
%l。 時 (1..12)
%M. 月の名前 (1月..12月)
%m。 月の数値指定 (00..12)
%R。 午前または午後
%r。 時刻、12 時間形式 (hh:mm:ss の後に AM または PM が続く)
%S。 秒 (00..59)
%s。 秒 (00..59)
%T。 時刻、24 時間形式 (hh:mm:ss)
%U。 週 (00..53)、日曜日が週の最初の日
%u。 週 (00..53)、月曜日が週の最初の日
%V。 週 (01..53)、日曜日が週の最初の日です。 %X とともに使用
%v. 週 (01..53)。月曜日が週の最初の日です。 %x とともに使用
%W。 曜日の名前 (日曜日..土曜日)
%w。 曜日 (0=日曜日..6=土曜日)
%バツ。 週の最初の日が日曜日である週の年、4 桁の数字。 %V とともに使用
%バツ。 週の最初の日が月曜日である週の年、4 桁の数字。 %V とともに使用
%Y。 年、日、4桁
%y。 西暦の数値指定(2桁)
%%。 文字通り%記号
%バツ。 x、すべて.x. 上記に記載されていないもの
DATE_SUB(日付,INTERVAL 式の単位)
DATE_ADD() 関数に似ています。
DAY(日付)
DAY() は、DAYOFMONTH() 関数の同義語です。
DAYNAME(日付)
指定された日付の曜日を返します。
DAYOFMONTH(日付)
指定された日付の日付を 0 ~ 31 の範囲で返します。
DAYOFWEEK(日付)
曜日のインデックスを返します (1 = 日曜日、2 = 月曜日、...、7 = 土曜日)。 これらのインデックス値は ODBC 標準に従います。
DAYOFYEAR(日付)
指定された日付の年間通算日を 1 ~ 366 の範囲で返します。
EXTRACT(日付からの単位)
EXTRACT() 関数は、DATE_ADD() または DATE_SUB() と同じタイプの単位インジケーターを使用しますが、日付の算術演算を実行せず、日付の単位インジケーター部分を抽出します。
FROM_DAYS(N)
DATE 値は、日数 N を考慮して返されます。
注記。 古い日付には FROM_DAYS() を慎重に使用してください。 この関数は、グレゴリオ暦 (1582 年) の導入以前の日付値を扱うことを目的としていません。
FROM_UNIXTIME(unix_timestamp)、FROM_UNIXTIME(unix_timestamp,format)
この関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、unix_timestamp 引数の表現を「YYYY-MM-DD HH:MM:SS または YYYYMMDDHHMMSS」形式の値として返します。 値は現在のタイムゾーンで表されます。 unix_timestamp パラメータは、UNIX_TIMESTAMP() 関数によって生成される内部タイムスタンプ値です。
format が指定されている場合、結果はフォーマット文字列に従ってフォーマットされます。フォーマット文字列は、DATE_FORMAT() セクションで説明されているのと同じ方法で使用されます。
HOUR(時間)
指定された時刻からの時間を返します。 返される値の範囲は 0 ~ 23 です。ただし、TIME 値の範囲は実際にははるかに広いため、HOUR は 23 を超える値を返すことができます。
LAST_DAY(日付)
日付または日時の値を受け取り、月の最終日に対応する値を返します。 引数が無効な場合は NULL を返します。
LOCALTIME と LOCALTIME()
LOCALTIME と LOCALTIME() は NOW() の同義語です。
LOCALTIMESTAMP と LOCALTIMESTAMP()
LOCALTIMESTAMP と LOCALTIMESTAMP() は NOW() の同義語です。
MAKEDATE(年、年の日)
日付、指定された年、および日付の値を返します。 dayofyear の値は 0 より大きい必要があります。0 より大きい場合、結果は NULL になります。
MAKETIME(時、分、秒)
引数時、分、秒から計算された時刻値を返します。
マイクロ秒(expr)
時間式または datetime(expr) 式からマイクロ秒を 0 ~ 999999 の範囲の数値として返します。
MINUTE(時間)
指定された時間の分を 0 ~ 59 の範囲で返します。
月(日付)
指定された日付の月を 0 ~ 12 の範囲で返します。
月名(日付)
指定された日付の完全な月名を返します。
今()
関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在の日付と時刻を「YYYY-MM-DD HH:MM:SS」または YYYYMMDDHHMMSS 形式の値として返します。 この値は現在のタイムゾーンで表されます。
PERIOD_ADD(P,N)
期間 P に N か月を追加します (YYMM または YYYYMM 形式)。 YYYYMM 形式で値を返します。 期間引数 P は日付値ではないことに注意してください。
PERIOD_DIFF(P1,P2)
期間 P1 と P2 の間の月数を返します。 期間 P1 および P2 は、YYMM または YYYYMM の形式で指定する必要があります。 期間引数 P1 および P2 は日付値ではないことに注意してください。
四半期(日付)
指定された日付の四半期を 1 ~ 4 の範囲で返します。
2回目)
0 ~ 59 の範囲の時間の秒値を返します。
SEC_TO_TIME(秒)
関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、秒引数を「HH:MM:SS」または HHMMSS 形式で時、分、秒に変換して返します。
STR_TO_DATE(str,format)
これは DATE_FORMAT() 関数の逆です。 文字列 str とフォーマット文字列 format を受け入れます。 STR_TO_DATE() 関数は、形式文字列に日付と時刻の両方が含まれている場合に DATETIME を返します。 それ以外の場合、文字列に日付または時刻のみが含まれている場合は、DATE または TIME を返します。
SUBDATE(日付,INTERVAL expr 単位) および SUBDATE(expr,days)
2 番目の引数を INTERVAL として指定して SUBDATE() を呼び出した場合、この関数は DATE_SUB() の同義語になります。 INTERVAL 引数の詳細については、「DATE_ADD()」を参照してください。
SUBTIME(expr1,expr2)
SUBTIME() 関数は expr1 を返します。 expr2 は expr1 と同じ形式の値として表現されます。 expr1 の値は時刻式または日付時刻式であり、expr2 の値は時刻式です。
SYSDATE()
関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在の日付と時刻を「YYYY-MM-DD HH:MM:SS」または YYYYMMDDHHMMSS 形式の値として返します。
時間(expr)
expr の時間部分を抽出し、文字列として返します。
TIMEDIFF(expr1,expr2)
TIMEDIFF() は expr1 を返します。 expr2 は時間値として表現されます。 値 expr1 と expr2 は時刻式または日時式のいずれかですが、両方とも同じ型である必要があります。
タイムスタンプ (expr)、タイムスタンプ (expr1、expr2)
引数を 1 つ指定すると、この関数は日付または日付時刻式 expr を日付時刻値として返します。 2 つの引数を使用すると、時刻式 expr2 を日付または日時式 expr1 に加算し、結果を日時値として返します。
TIMESTAMPADD(単位、間隔、日時_式)
この関数は、整数間隔式を日付または時刻式 datetime_expr に追加します。 間隔の単位は、unit 引数で指定され、次のいずれかの値をとります。
単位値は、上記のキーワードのいずれかを使用するか、SQL_TSI_ プレフィックスを使用して指定できます。 たとえば、DAY と SQL_TSI_DAY は有効な値です。
TIMESTAMPDIFF(単位,日時_式1,日時_式2)
日付または日付時刻式 datetime_expr1 と datetime_expr2 の間の整数の差を返します。 結果の測定単位は、unit 引数によって指定されます。 ユニット引数の有効な値は、TIMESTAMPADD() 関数にリストされている値と同じです。
TIME_FORMAT(時間,形式)
この関数は DATE_FORMAT() 関数と同じ方法で使用されますが、書式文字列には時間、分、秒の書式指定子のみを含めることができます。
時刻値に 23 より大きい時間の部分が含まれている場合、時計形式インジケーター %H および %k は、通常の範囲である 0 ~ 23 より大きい値を与えます。他の時計形式インジケーターは、12 時間を法とする値を与えます。
TIME_TO_SEC(時間)
秒に変換された時間引数を返します。
今日の日付)
指定された日付の日番号 (0 年からの日数) を返します。
UNIX_TIMESTAMP()、UNIX_TIMESTAMP(日付)
この関数が引数なしで呼び出された場合、Unix タイムスタンプ (「1970-01-01 00:00:00」UTC からの秒数) を正の整数として返します。 UNIX_TIMESTAMP() が日付引数を指定して呼び出された場合、「1970-01-01 00:00:00」UTC からの秒数で表された引数の値が返されます。 date には、DATE 文字列、DATETIME 文字列、TIMESTAMP、または YYMMDD または YYYYMMDD 形式の数値を指定できます。
UTC_DATE、UTC_DATE()
この関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在の UTC 日付を「YYYY-MM-DD」または YYYYMMDD 形式の値として返します。
UTC_TIME、UTC_TIME()
関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在の UTC 時間を「HH:MM:SS」または HHMMSS 形式の値として返します。
UTC_TIMESTAMP、UTC_TIMESTAMP()
この関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在の UTC 日付と時刻を値 "YYYY-MM-DD HH:MM:SS" または YYYYMMDDHHMMSS 形式で返します。
WEEK(日付[,モード])
この関数は、指定された日付の週番号を返します。 2 つの引数を持つ WEEK() 形式を使用すると、週が日曜日と月曜日のどちらで始まるか、および戻り値の範囲が 0 ~ 53 または 1 ~ 53 のどちらであるかを指定できます。mode 引数が省略された場合、 default_week_format システム変数が使用されます
平日(日付)
指定された日付の曜日のインデックスを返します (0 = 月曜日、1 = 火曜日、6 = 日曜日)。
WEEKOFYEAR(日付)
指定された日付 date の暦週を 1 ~ 53 の範囲の数値として返します。 WEEKOFYEAR() は、WEEK(date,3) と同等の互換関数です。
年(日付)
指定された日付の年を 1000 ~ 9999 の範囲で返します。date.zero の場合は 0 を返します。
YEARWEEK(日付)、YEARWEEK(日付、モード)
指定された日付の年と週を返します。 モード引数は、WEEK() 関数のモード引数とまったく同じように機能します。 結果の年は、年の最初と最後の週の日付引数の年とは異なる場合があります。
注記。 WEEK() は特定の年のコンテキストで週を返すため、週番号は、WEEK() がオプションの 0 または 1 引数に対して (0) を返すものとは異なります。
最終更新日: 2017 年 7 月 29 日
T-SQL には、日付と時刻を操作するための関数が多数用意されています。
年 (yy, yyyy) : 年
四半期 (qq, q) : 四半期
月 (mm, m) : 月
dayofyear (dy, y) : 年間通算日
day (dd, d) : 月の日
週 (週、ww) : 週
平日 (dw) : 曜日
時 (hh) : 時
分 (mi, n) : 分
秒 (ss, s) : 秒
ミリ秒 (ms) : ミリ秒
マイクロ秒 (mcs) : マイクロ秒
ナノ秒 (ns) : ナノ秒
tzoffset (tz) : GMT を基準とした分単位のオフセット (datetimeoffset オブジェクトの場合)
GETDATE: システムクロックに基づいて現在のローカル日付と時刻を日時オブジェクトとして返します。
SELECT GETDATE() -- 2017-07-28 21:34:55.830
GETUTCDATE : 現在のローカル日付と時刻をグリニッジ標準時 (UTC/GMT) で datetime オブジェクトとして返します。
SELECT GETUTCDATE() -- 2017-07-28 18:34:55.830
SYSDATETIME: システム クロックに基づいて現在のローカル日付と時刻を返しますが、日付と時刻が datetime2 オブジェクトとして返される点で GETDATE とは異なります。
SELECT SYSDATETIME() -- 2017-07-28 21:02:22.7446744
SYSUTCDATETIME : 現在のローカル日付と時刻をグリニッジ標準時 (UTC/GMT) で datetime2 オブジェクトとして返します。
SELECT SYSUTCDATETIME() -- 2017-07-28 18:20:27.5202777
SYSDATETIMEOFFSET : GMT を基準とした日付と時刻を含む datetimeoffset(7) オブジェクトを返します。
SELECT SYSDATETIMEOFFSET() -- 2017-07-28 21:02:22.7446744 +03:00
DAY: パラメータとして渡された日付の日を返します。
日の選択(GETDATE()) -- 28
MONTH : 日付の月を返します
SELECT MONTH(GETDATE()) -- 7
YEAR : 日付から年を返します
年を選択(GETDATE()) -- 2017
DATENAME: 日付部分を文字列として返します。 日付部分の選択パラメーターが最初のパラメーターとして渡され、日付自体が 2 番目のパラメーターとして渡されます。
SELECT DATENAME(月, GETDATE()) -- 7 月
日付の一部を決定するには、次のパラメータを使用できます (括弧内に省略形が示されています)。
DATEPART: 日付部分を数値として返します。 日付部分の選択パラメーターが最初のパラメーターとして渡され (DATENAME と同じパラメーターが使用されます)、日付自体が 2 番目のパラメーターとして渡されます。
SELECT DATEPART(月, GETDATE()) -- 7
DATEADD: 特定の日付コンポーネントに数値を加算した結果である日付を返します。 最初のパラメータは、DATENAME 関数について上で説明した日付コンポーネントを表します。 2 番目のパラメータは追加する量です。 3 番目のパラメータは日付そのもので、以下を追加する必要があります。
SELECT DATEADD(month, 2, "2017-7-28") -- 2017-09-28 00:00:00.000 SELECT DATEADD(day, 5, "2017-7-28") -- 2017-08-02 00 :00:00.000 SELECT DATEADD(日, -5, "2017-7-28") -- 2017-07-23 00:00:00.000
追加された数量が負の数を表す場合、日付は実際には減分されます。
DATEDIFF: 2 つの日付の差を返します。 最初のパラメータは日付コンポーネントで、差を測定する単位を示します。 2 番目と 3 番目のパラメータは比較される日付です。
SELECT DATEDIFF(年, "2017-7-28", "2018-9-28") -- 1 年の差 SELECT DATEDIFF(月, "2017-7-28", "2018-9-28") -- 差14 か月 SELECT DATEDIFF(day, "2017-7-28", "2018-9-28") -- 差 427 日
TODATETIMEOFFSET : 時間オフセットを別の datetimeoffset オブジェクトに追加した結果である datetimeoffset 値を返します。
SELECT TODATETIMEOFFSET("2017-7-28 01:10:22", "+03:00")
SWITCHOFFSET: datetime2 オブジェクトに時刻オフセットを追加した結果である datetimeoffset 値を返します。
SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), "+02:30")
EOMONTH : パラメーターとして渡された日付で使用される月の最終日の日付を返します。
SELECT EOMONTH("2017-02-05") -- 2017-02-28 SELECT EOMONTH("2017-02-05", 3) -- 2017-05-31
オプションの 2 番目のパラメーターとして、日付に追加する必要がある月数を渡すことができます。 その後、月の末日が新しい日付として計算されます。
DATEFROMPARTS : 年、月、日によって日付を作成します
パーツから日付を選択(2017、7、28) -- 2017-07-28
ISDATE: 式が日付であるかどうかをテストします。 存在する場合は 1 を返し、そうでない場合は 0 を返します。
SELECT ISDATE("2017-07-28") -- 1 SELECT ISDATE("2017-28-07") -- 0 SELECT ISDATE("07-28-2017") -- 0 SELECT ISDATE("SQL") - - 0
関数の使用例は、注文日を含む注文テーブルを作成することです。
CREATE TABLE 注文 (Id INT IDENTITY PRIMARY KEY、ProductId INT NOT NULL、CustomerId INT NOT NULL、CreatedAt DATE NOT NULL DEFAULT GETDATE()、ProductCount INT DEFAULT 1、Price MONEY NOT NULL);
DEFAULT GETDATE() 式は、データの追加時に日付が指定されない場合、GETDATE() 関数を使用して自動的に計算されることを指定します。
別の例 - 16 日前に行われた注文を探してみましょう。
SELECT * FROM 注文 WHERE DATEDIFF(日, CreatedAt, GETDATE()) = 16
ブログ サイトの読者の皆様、こんにちは。 データベースには、日付と時刻に関連するさまざまなデータを保存する必要があることがよくあります。 これは、情報が追加された日付、ユーザー登録の日付、最後の認証時刻、およびその他のデータである場合があります。 で SQL言語日付と時刻に関する関数はたくさんありますので、今回はそれらを見ていきます。
以下で説明するすべての関数は、カレンダー データ型で動作します。
現在の日付と時刻を取得します。
入手するには 現在の日付と時刻関数が使われている 今().
今すぐ選択()
結果: 2015-09-25 14:42:53
受け取るだけ 現在の日付機能があります CURDATE().
SELECT CURDATE()
結果: 2015-09-25
そして機能 時間()のみを返します 現在の時刻:
選択現在の時間()
結果: 14:42:53
CURDATE() 関数と NOW() 関数は、追加された日付を保存したいデータベースにレコードを追加する場合に便利です。 たとえば、Web サイトに記事を追加する場合、その公開日を保存することをお勧めします。 次に、データベースに記事を追加するリクエストは次のようになります。
INSERT INTO 投稿 (id_post, text_post, date_publication) VALUES (1, "記事テキスト", NOW ());
日付と時刻の加算と減算
関数 ADDDATE (日付、INTERVAL 値) 日付に追加日付 意味値を返し、結果の値を返します。 値として次の値を使用できます。
- SECOND - 秒
- 分 - 分
- HOUR - 時間
- 日 - 日
- 週 - 週
- 月 - 月
- クォーター - ブロック
- 年 - 年
およびそれらの組み合わせ:
- MINUTE_SECOND - 分と秒
- HOUR_SECOND 時 - 分と秒
- HOUR_MINUTE - 時と分
- DAY_SECOND - 日、時、分、秒
- DAY_MINUTE - 日、時間、分
- DAY_HOUR - 日数と時間
- YEAR_MONTH - 年と月。
SELECT ADDDATE (「2015-09-28 10:30:20」、間隔 1 日)
結果: 2015-09-29 10:30:20
SELECT ADDDATE ("2015-09-28 10:30:20"、INTERVAL "3 1:20" DAY_MINUTE)
結果: 2015-10-01 11:50:20
関数 SUBDATE (日付、INTERVAL 値)生成する 引き算価値観 日付から日付。 例:
サブ日付の選択 (「2015-09-28 10:30:20」、間隔 20 時間)
結果: 2015-09-27 14:30:20
関数 PERIOD_ADD(期間, n) 追加します値期間 n まで 月。 期間の値は YYYYMM 形式である必要があります (たとえば、2015 年 9 月は 201509 になります)。 例:
SELECT PERIOD_ADD (201509, 4)
結果: 201601
関数 TIMESTAMPADD(間隔, n, 日付) 日付に追加日付 時間間隔 n 、その値は間隔パラメータで指定されます。 間隔パラメータの可能な値:
- FRAC_SECOND - マイクロ秒
- SECOND - 秒
- 分 - 分
- HOUR - 時間
- 日 - 日
- 週 - 週
- 月 - 月
- クォーター - ブロック
- 年 - 年
SELECT TIMESTAMPADD (QUARTER, 1, "2015-09-28")
結果: 2015-12-28
関数 サブタイム (日付、時刻) 日付から減算する日付 時間時間。 例:
SELECT SUBTIME("2015-09-28 10:30:20", "50:20:19")
結果: 2015-09-26 08:10:01
日付間の間隔を計算する
関数 TIMEDIFF(日付1, 日付2) 時間、分、秒の差を計算します 2 つの日付 date1 と date2 の間。 例:
SELECT TIMEDIFF("2015-09-28 10:30:20", "2015-09-29 10:30:20")
結果: -24:10:00
関数 DATEDIFF(日付1, 日付2)計算します 日数の差 2 つの日付の間、日付を指定する場合、時、分、秒は無視されます。 例:
SELECT DATEDIFF("2015-09-28 00:00:20", "2015-09-27 23:40:20")
結果: 1
この関数を使用すると、記事の公開日から経過した日数を簡単に判断できます。
SELECT DATEDIFF (CURDATE(), date_publication) FROM 投稿 WHERE id_post = 1
関数 PERIOD_DIFF (期間 1、期間 2)計算します 月の差 2つの日付の間。 日付は YYYYMM 形式である必要があります。 たとえば、2015 年 1 月から 2015 年 9 月までに何ヶ月が経過したかを調べてみましょう。
SELECT PERIOD_DIFF (201509、201501)
結果: 9
関数 TIMESTAMPDIFF(間隔, 日付1, 日付2)日付 date2 と date1 の差を、interval パラメーターで指定された単位で計算します。 この場合、間隔は次の値を取ることができます。
- FRAC_SECOND - マイクロ秒
- SECOND - 秒
- 分 - 分
- HOUR - 時間
- 日 - 日
- 週 - 週
- 月 - 月
- クォーター - ブロック
- 年 - 年
SELECT TIMESTAMPDIFF (HOUR, "2015-09-28 10:30:20", "2015-09-28 19:50:20")
結果: 9
さまざまな日付と時刻の形式およびその他の情報の取得
関数 DATE (日時)戻り値 日付、締め切り時間。 例:
SELECT DATE("2015-09-28 10:30:20")
結果: 2015-09-28
関数 TIME (日時)戻り値 時間、締め切り日。 例:
時間を選択 (「2015-09-28 10:30:20」)
結果:10:30:20
関数 タイムスタンプ (日付)戻り値 時間の経過とともに完全なフォーマットになる日付 日付 。 例:
TIMESTAMP("2015-09-28")
結果: 2015-09-28 00:00:00
DAY(日付)そして DAYOFMONTH (日付)。 返す同義関数 日付のシリアル番号。 例:
SELECT DAY("2015-09-28")、DAYOFMONTH("2015-09-28")
結果: 28 | 28
機能 DAYNAME (日付),DAYOFWEEK (日付)そして 平日(日付)。 最初の関数は戻り値を返します 曜日の名前、 2番 - 曜日番号(1 - 日曜日から 7 - 土曜日まで数えます)、3 番目も曜日の番号で、別のカウントダウン (0 - 月曜日から 6 - 日曜日まで数えます) だけです。 例:
SELECT DAYNAME("2015-09-28")、DAYOFWEEK("2015-09-28")、WEEKDAY("2015-09-28")
結果: 月曜日 2 | 0
機能 週(日付)そして WEEKOFYEAR (日時)。 どちらの関数も戻り値を返します その年の週番号、最初の週のみ日曜日に始まり、2 番目の週は月曜日に始まります。 例:
週の選択 ("2015-09-28 10:30:20")、週の年 ("2015-09-28 10:30:20")
結果: 39 | 40
関数 月(日付)戻り値 月の数値(1 から 12)、および 月名 (日付) 月名。 例:
SELECT MONTH("2015-09-28 10:30:20"), MONTHNAME("2015-09-28 10:30:20")
結果: 9 | 9月
関数 四半期 (日付)戻り値 ブロック番号年 (1 年から 4 年)。 例:
四半期を選択 ("2015-09-28 10:30:20")
結果: 3
関数 年(日付)戻り値 年の値(1000 ~ 9999)。 例:
年を選択 ("2015-09-28 10:30:20")
結果: 2015年
関数 DAYOFYEAR (日付)戻り値 その日のシリアルナンバー年ごと (1 ~ 366)。 プライマー:
日付を選択 ("2015-09-28 10:30:20")
結果: 271
関数 時間 (日時)戻り値 時間値(0 から 23)。 例:
時間を選択 (「2015-09-28 10:30:20」)
結果: 10
関数 MINUTE (日時)戻り値 分の値(0から59まで)。 例:
分を選択 (「2015-09-28 10:30:20」)
結果: 30
関数 SECOND (日時)戻り値 秒の値(0から59まで)。 例:
SELECT SECOND ("2015-09-28 10:30:20")
結果: 20
関数 EXTRACT (日付から入力) type パラメータで指定された日付部分を返します。 例:
SELECT EXTRACT ("2015-09-28 10:30:20" からの年)、EXTRACT ("2015-09-28 10:30:20" からの月)、EXTRACT ("2015-09-28 10:30" からの日) :20")、抽出 (「2015-09-28 10:30:20」からの時間)、抽出 (「2015-09-28 10:30:20」からの分)、抽出 (「2015-09-」からの秒) 28 10:30:20")
結果: 2015 | 9 | 28 | 10 | 30 | 20
逆関数 今日の日付)そして FROM_DAYS(n)。 初め 日付を日数に変換します、ゼロ年から経過しました。 2番目は逆に受け入れます 日数、ゼロ年から経過し、 それらを日付に変換します。 例:
SELECT TO_DAYS ("2015-09-28 10:30:20")、FROM_DAYS (736234)
結果: 736234 | 2015-09-28
逆関数 UNIX_TIMESTAMP (日付)そして FROM_UNIXTIME(n)。 初め 日付を秒数に変換します 1970 年 1 月 1 日から経過しました。 2番目は逆に受け入れます 秒数、1970 年 1 月 1 日以降、および それらを日付に変換します。 例:
SELECT UNIX_TIMESTAMP ("2015-09-28 10:30:20")、FROM_UNIXTIME (1443425420)
結果: 1443425420 | 2015-09-28 10:30:20
逆関数 TIME_TO_SEC (時間)そして SEC_TO_TIME(n)。 初め 時間を秒数に変換します、一日の始まりから過ぎました。 2 つ目は、逆に、1 日の始まりからの秒数を取得し、時間に変換します。 例:
SELECT TIME_TO_SEC ("10:30:20")、SEC_TO_TIME (37820)
結果: 37820 | 10:30:20
関数 作成日 (年、n)年と n 年の日の番号を取得し、それらを日付に変換します。 例。
日付を扱うSQL– これは非常に重要であるため、価値のあるプロジェクトでは基本的な SQL 演算子の知識なしでは作業を進めることができません。 何と言っても、すべてのサービスでは時間を考慮して作業する必要があります。 原則として、これはある日付から別の日付までの期間の計算であり、たとえば、年、月、日、時間の登録ユーザーのリストを表示します。私自身が毎日遭遇する、SQL での日付の操作に関連する一般的なタスクに対する解決策をいくつか紹介したいと思います。これが皆さんにとって適切で役立つことを願っています。
SQLで現在の日付を取得する方法
WHERE 日付 = CURDATE()
または別のオプション
WHERE 日付 = STR_TO_DATE(now(), "%Y-%m-%d")
SQL で日付に 1 時間を追加します
DATE_ADD("2013-03-30"、間隔 1 時間)
SQL で日付に 1 日を加算する
DATE_ADD("2013-03-30"、間隔 1 日)
同様に、現在の日付に任意の日数を追加できます。
SQL で日付に 1 か月を加算します
DATE_ADD("2013-03-30"、間隔 1 か月)
同様に、現在の日付に任意の月数を追加できます。
SQLで昨日の日を取得する
DATE_ADD(CURDATE(), INTERVAL -1 DAY)
または
DATE_SUB(CURDATE()、間隔 1 日)
SQLで今週の開始日を取得する
これは一見すると最も難しいタスクの 1 つですが、非常に簡単に解決できます。
CURDATE()-WEEKDAY(CURDATE());
今週の月曜日から現在の曜日までの選択を SQL で取得します
SQLで現在の月の初日から現在の曜日までの選択を取得します
WHERE (日付 (CURDATE()-WEEKDAY(CURDATE())) と CURDATE())
SQLでユーザーの生年月日を取得する方法 SQL で来月が誕生日のユーザーをすべて検索する SQL での日付の操作に関する上記のケースに加えて、次の演算子のドキュメントを読むことをお勧めします。 SQL での日付の操作は、実際にはそれほど難しくありません。PHP を使用して期間を計算する代わりに、SQL クエリを実行する段階でこれを実行し、必要なデータ選択を取得できるようになりました。
SELECT 名前、生年月日、CURRENT_DATE、(YEAR(CURRENT_DATE)-YEAR(誕生)) - (RIGHT(CURRENT_DATE,5)
SELECT 名前、生年月日 FROM ユーザー WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
または別のオプション
ペットから名前、誕生を選択 WHERE MONTH(誕生) = MOD(MONTH(NOW()), 12) + 1;
今()– 現在の日付と時刻を返します。
CURDATE()– 現在の日付を返します。
時間()– 現在時刻を返します。
日付()– 日付と時刻の 2 つの部分で構成されます。
抽出する()– 単一の日付/時刻値を返します。
DATE_ADD()– 指定された日数/分/時間などをサンプルに追加します。
DATE_SUB()– 日付から指定された間隔を減算します。
DATEDIFF()– 2 つの日付の間の時間値を返します。
DATE_FORMAT()– 時刻情報の各種出力機能。