|
日付および時刻関数は、DATE や TIME のような日付または時刻のデータ型から成るデータの処理および操作に使用されます。
関数の値をテーブルに挿入する場合、すべての日付/時刻関数でサポートされている 1 つの方法は、次に示すような INSERT ステートメント内で SELECT サブクエリを使用する方法です。
CURDATE()、CURTIME()、NOW() などのいくつかの関数では、次に示すような直接の INSERT もサポートされます。
INSERT INTO t1 (c1) VALUES (CURDATE())
関数
|
説明
|
---|---|
CURDATE( )
|
現在の現地日付を 'yyyy-mm-dd' 形式で返します。デフォルトで、ローカル時計の時刻を使用します。SET TIME ZONE を呼び出した場合、CURDATE() の値は、システム時計とオペレーティング システムの地域の設定を基に UTC 日付/時刻を計算し、SET TIME ZONE で指定されたディスプレースメント値を加算することによって決定されます。
|
CURRENT_DATE( )
|
現在の UTC 日付を 'yyyy-mm-dd' 形式で返します。
|
CURTIME( )
|
現在の現地時刻を 'hh:mm:ss' 形式で返します。デフォルトで、ローカル時計の時刻を使用します。SET TIME ZONE を呼び出した場合、CURTIME() の値は、システム時計とオペレーティング システムの地域の設定を基に UTC 日付/時刻を計算し、SET TIME ZONE で指定されたディスプレースメント値を加算することによって決定されます。
|
CURRENT_TIME( )
|
現在の UTC 時刻を 'hh:mm:ss' 形式で返します。
|
CURRENT_TIMESTAMP( )
|
現在の UTC 日付と時刻をタイムスタンプ値として次の形式で返します。
'yyyy-mm-dd hh:mm:ss.mmm'
|
DATEADD(datepart, interval, date_exp)
|
日付に interval を加算した新しい DATETIME 値を返します。たとえば、datapart が day、interval が 11、date_exp が 2020 年 1 月 26 日の場合は、2020 年 2 月 6 日を返します。
datepart には interval を加算する日付の部分を指定します。値は以下のいずれかである必要があります。
year
quarter month day dayofyear week hour minute second millisecond
interval には、datepart を増加させるために用いる正または負の整数値を指定します。interval に小数部が含まれる場合、小数部は無視されます。
date_exp は DATETIME 値、暗黙的に DATETIME 値に変換される値、または DATE 形式の文字列を返す式です。「DATETIME」 を参照してください。
|
DATEDIFF(datepart, start, end)
|
2 つの日付の差異を表す整数を返します。この整数は、2 つの日付間の日付と時刻の境界の数です。
たとえば、テーブル mytest に col1 および col2 の 2 つの列があり、両方とも DATETIME だとします。col1 の値は 2000-01-01 11:11:11.234 で、col2 は 2004-09-11 10:10:10.211 です。次の SELECT ステートメントは 56 を返します。それが col1 と col2 の月の差異だからです。
SELECT DATEDIFF(month, col1, col2) as Month_Difference FROM mytest
datepart には差異を計算する日付の部分を指定します。値は以下のいずれかである必要があります。
year
quarter month day dayofyear week hour minute second millisecond
start には差異を計算する始まりの日付を指定します。start は DATETIME 値または DATE 形式の Unicode 文字列を返す式です。
end には差異を計算する終わりの日付を指定します。end は DATETIME 値または DATE 形式の Unicode 文字列を返す式です。
|
DATENAME(datepart, date_exp)
|
date_exp の datepart を表す英語の文字列(VARCHAR)を返します。たとえば、datepart month は January、February というように月名を返します。datepart weekday は Monday、Tuesday というように曜日を返します。
datepart は返される日付の部分で、値は以下のいずれかである必要があります。
year
quarter month day dayofyear week weekday hour minute second millisecond
date_exp は DATETIME 値、暗黙的に DATETIME 値に変換される値、または DATE 形式の文字列を返す式です。「DATETIME」 を参照してください。
|
DATEPART(datepart, date_exp)
|
date_exp の datepart を表す整数を返します。たとえば、datepart month は月を表す整数を返します(1 月 = 1、2 月 = 2)。datepart weekday は曜日を表す整数を返します(日曜日 = 1、土曜日 = 7)。
Datepart は返される日付の部分で、値は以下のいずれかである必要があります。
year
quarter month day dayofyear week weekday hour minute second millisecond TZoffset
TZoffset 値は、タイム ゾーンのオフセットを分数(符号付き)で返します。TZoffset を指定した DATEPART 関数は、SYSDATETIMEOFFSET() および、タイム ゾーンのオフセットを含んでいる文字列リテラルでのみ機能します。タイム ゾーン オフセットの範囲は -14:00 から +14:00 です。例を参照してください。
date_exp は DATETIME 値、暗黙的に DATETIME 値に変換される値、または DATE 形式の文字列を返す式です。「DATETIME」 を参照してください。
|
DAY (date_exp)
|
指定された date_exp の日にちを返します。これは DATEPART(day, date_exp) とまったく同じです。DATEPART(datepart, date_exp) を参照してください。
|
DAYNAME(date_exp)
|
date_exp の曜日部分に対して、曜日の名前(たとえば、Sunday から Saturday)を含んでいる英語の文字列を返します。
date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
DAYOFMONTH(date_exp)
|
date_exp の月の何日目かを 1 ~ 31 の範囲の整数値で返します。date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
DAYOFYEAR(date_exp)
|
date_exp の年の何日目かを 1 ~ 366 の範囲の整数値で返します。
|
EXTRACT(extract_field, extract_source)
|
extract_source の extract_field 部分を返します。引数 extract_source は、日付、時刻、または間隔を表す式です。
extract_field に指定できるキーワードは次のとおりです。
YEAR
MONTH DAY HOUR MINUTE SECOND
これらの値は、ターゲット式から返されます。
|
HOUR(time_exp)
|
時刻を 0 ~ 23 の範囲の整数値で返します。time_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
MINUTE(time_exp)
|
分を 0 ~ 59 の範囲の整数値で返します。time_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
MONTH(date_exp)
|
月を 1 ~ 12 の範囲の整数値で返します。date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
MONTHNAME(date_exp)
|
date_exp の月の部分に対して、月名(たとえば、January から December)を含んでいる英語の文字列を返します。date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
NOW( )
|
現在の現地日付と時刻をタイムスタンプ値として次の形式で返します。
'yyyy-mm-dd hh:mm:ss.mmm'
デフォルトで、ローカル時計の時刻を使用します。SET TIME ZONE を呼び出した場合、NOW() の値は、システム時計とオペレーティング システムの地域の設定を基に UTC 日付/時刻を計算し、SET TIME ZONE で指定されたディスプレースメント値を加算することによって決定されます。
|
QUARTER(date_exp)
|
date_exp の四半期を 1 ~ 4 の範囲の整数値で返します。1 は 1 月 1 日~ 3 月 31 日を表します。date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
SECOND(time_exp)
|
秒を 0 ~ 59 の範囲の整数値で返します。time_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
SYSDATETIMEOFFSET
|
現在の日付と時刻に加えて、Pervasive PSQL データベース エンジンが起動しているコンピューターの現在のタイム ゾーンと UTC の間の時間と分のオフセットを返します。サマー タイム(DST)が考慮されます。
返されるデフォルトの書式は、YYYY-MM-DD hh:mm:ss[.nnnnnnn] [<+ | ->hh:mm] です。"+" は、現在のタイム ゾーンが UTC より進んでいることを示します。"-" は、現在のタイム ゾーンが UTC より遅れていることを示します。
|
TIMESTAMPADD(interval, integer_exp, timestamp_exp)
|
interval タイプの integer_exp で示された間隔を timestamp_exp に加算したタイムスタンプを返します。
interval に指定できるキーワードは次のとおりです。
SQL_TSI_YEAR
SQL_TSI_QUARTER SQL_TSI_MONTH SQL_TSI_WEEK SQL_TSI_DAY SQL_TSI_HOUR SQL_TSI_MINUTE SQL_TSI_SECOND |
TIMESTAMPDIFF(interval, timestamp_exp1, timestamp_exp2)
|
timestamp_exp2 が timestamp_exp1 より大きい場合に、その差である interval の整数値を返します。
interval に指定できる値は、TIMESTAMPADD と同じです。
|
WEEK(date_exp)
|
date_exp が 1 年の第何週目かを 1 ~ 53 の範囲の整数値で返します。date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
WEEKDAY (date_exp)
|
指定された date_exp の曜日を返します。1 = 日曜日、7 = 土曜日です。これは DATEPART(weekday, date_exp) とまったく同じです。DATEPART(datepart, date_exp) を参照してください。
|
YEAR(date_exp)
|
年数を整数値で返します。範囲はデータ ソースに依存します。date_exp には、日付リテラル、タイムスタンプ リテラル、または DATE、TIMESTAMP、DATETIME データが格納されている列を指定できます。
|
次の例は、日付/時刻関数を基に値を挿入する方法を示します。CURDATE() などのいくつかの関数は、INSERT ステートメントの中で直接使うことができます。しかし、それ以外の関数では、このような方法はサポートされていません。広範囲にわたってサポートされている方法は、SELECT を含む INSERT を使用するものです。以下の例では、CURRENT_TIME() によって返される UTC 時刻値がテーブル T1 に挿入されます。
次は HOUR の使用例です。
SELECT c.Name, c.Credit_Hours FROM Course c WHERE c.Name = ANY (SELECT cl.Name FROM Class cl WHERE c.Name = cl.Name AND c.Credit_Hours >(HOUR (Finish_Time - Start_Time) + 1))
これは MINUTE の使用例です。
次は SECOND の使用例です。
次は NOW() の使用例です。
次は、MONTH、DAY、YEAR、HOUR、MINUTE を複合的に使用した例です。
SELECT Name, Section, MONTH(Start_Date), DAY(Start_Date), YEAR(Start_Date), HOUR(Start_Time), MINUTE(Start_Time) FROM Class
次は CURDATE() の使用例です。
SELECT ID, Name, Section FROM Class WHERE (Start_Date - CURDATE()) <= 2 AND (Start_Date - CURDATE()) >= 0
次の例では、Class テーブルにあるクラスの開始日を基に、月の何日目かとその曜日を求めます。
SELECT DAYOFMONTH(Start_date), DAYOFWEEK(Start_date) from Class SELECT * FROM person WHERE YEAR(Date_Of_Birth) < 1970
次は、TZoffset パラメーターを指定した DATEPART の使用例です。
ステートメントが -360 を返すとしたら、現在のタイム ゾーンは UTC より 360 分遅れています。
SELECT SYSDATETIMEOFFSET() が 2011-01-24 14:33:08.4650000 -06:00 を返すとします。これを前提として、次のクエリは -360 を返します。
タイム ゾーンの部分が文字列リテラルから省略されている場合は、0 が返されます。
|