時刻、日付、および間隔を扱う関数

次の表に、ODBC スカラー関数セットに含まれる時刻関数と日付関数を示します。 アプリケーションは、情報の種類が SQL_TIMEDATE_FUNCTIONS の SQLGetInfo を呼び出すことによって、ドライバーでサポートされている時刻と日付の関数を決定できます。

timestamp_expとして示される引数には、列の名前、別のスカラー関数の結果、ODBC-time-escapeODBC-date-escapeODBC-timestamp-escape のいずれかを指定できます。基になるデータ型は、SQL_CHAR、SQL_VARCHAR、SQL_TYPE_TIME、SQL_TYPE_DATE、またはSQL_TYPE_TIMESTAMPとして表すことができます。

date_expとして示される引数には、列の名前、別のスカラー関数の結果、または基になるデータ型をSQL_CHAR、SQL_VARCHAR、SQL_TYPE_DATE、またはSQL_TYPE_TIMESTAMPとして表すことができる ODBC-date-escape または ODBC-timestamp-escape を指定できます。

time_expとして示される引数には、列の名前、別のスカラー関数の結果、または基になるデータ型をSQL_CHAR、SQL_VARCHAR、SQL_TYPE_TIME、またはSQL_TYPE_TIMESTAMPとして表すことができる ODBC-time-escape または ODBC-timestamp-escape を指定できます。

SQL-92 に合わせて、ODBC 3.0 にCURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMPのタイム日付スカラー関数が追加されました。

機能 説明
CURRENT_DATE( ) (ODBC 3.0) 現在の日付を返します。
CURRENT_TIME[(time-precision)] (ODBC 3.0) 現在のローカル時間を返します。 time-precision 引数は、返される値の秒の有効桁数を決定します。
CURRENT_TIMESTAMP
[(timestamp-precision)] (ODBC 3.0)
現在のローカル日付と現地時刻をタイムスタンプ値として返します。 timestamp-precision 引数は、返されるタイムスタンプの秒の有効桁数を決定します。
CURDATE( ) (ODBC 1.0) 現在の日付を返します。
CURTIME( ) (ODBC 1.0) 現在のローカル時間を返します。
DAYNAME(date_exp) (ODBC 2.0) 日付のデータ ソース固有の名前を含む文字列を返します (たとえば、英語を使用するデータ ソースの場合は日曜日から土曜日、日曜日は Sat を、ドイツ語を使用するデータ ソースの場合は Sonntag から Samstag date_exp)。
DAYOFMONTH(date_exp) (ODBC 1.0) date_expの月フィールドに基づいて、1 から 31 の範囲の整数値として月の日を返します。
DAYOFWEEK(date_exp) (ODBC 1.0) date_expの週フィールドに基づいて曜日を 1 から 7 の範囲の整数値として返します。1 は日曜日を表します。
DAYOFYEAR(date_exp) (ODBC 1.0) date_expの年フィールドに基づいて、年の日を 1 から 366 の範囲の整数値として返します。
EXTRACT(extract-field FROMextract-source) (ODBC 3.0) 抽出元抽出フィールド部分を返します。 extract-source 引数は、datetime または interval 式です。 引数 extract-field には、次のいずれかのキーワードを指定できます。

年月日時間分秒

戻り値の有効桁数は実装定義です。 SECOND を指定しない限り、小数点以下桁数は 0 です。この場合、小数点以下桁数は 抽出元 フィールドの秒の小数部の有効桁数より小さくはありません。
HOUR(time_exp) (ODBC 1.0) time_expの hour フィールドに基づいて、0 から 23 の範囲の整数値として時間を返します。
MINUTE(time_exp) (ODBC 1.0) time_expの minute フィールドに基づいて、0 から 59 の範囲の整数値として分を返します。
MONTH(date_exp) (ODBC 1.0) date_expの月フィールドに基づいて、1 から 12 の範囲の整数値として月を返します。
MONTHNAME(date_exp) (ODBC 2.0) 月のデータ ソース固有の名前を含む文字列を返します (たとえば、1 月から 12 月または 1 月から 12 月。英語を使用するデータ ソースの場合は 、ドイツ語を使用するデータ ソースの場合は Januar から Dezember)。 date_expの月の部分。
NOW( ) (ODBC 1.0) 現在の日付と時刻をタイムスタンプ値として返します。
QUARTER(date_exp) (ODBC 1.0) date_expの四半期を 1 から 4 の範囲の整数値として返します。1 は 1 月 1 日から 3 月 31 日を表します。
SECOND(time_exp) (ODBC 1.0) time_expの 2 番目のフィールドに基づいて、0 から 59 の範囲の整数値として 2 番目の フィールドを返します。
TIMESTAMPADD(interval, integer_exp, timestamp_exp) (ODBC 2.0) timestamp_expにinterval 型の間隔integer_exp加算して計算されたタイムスタンプを返しますinterval の有効な値は、次のキーワードです。

SQL_TSI_FRAC_SECOND

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

小数部の秒は、1 秒の 10 億分の 1 で表されます。 たとえば、次の SQL ステートメントは、各従業員の名前と 1 年の記念日を返します。

SELECT NAME, {fn TIMESTAMPADD(SQL_TSI_YEAR, 1, HIRE_DATE)} FROM EMPLOYEES

timestamp_expが時間値で、間隔に日、週、月、四半期、または年が指定されている場合、timestamp_expの日付部分は、結果のタイムスタンプを計算する前に現在の日付に設定されます。

timestamp_expが日付値で、間隔で秒、秒、分、または時間の小数部が指定されている場合、結果のタイムスタンプを計算する前に、timestamp_expの時間部分は 0 に設定されます。

アプリケーションは、SQL_TIMEDATE_ADD_INTERVALS オプションを使用して SQLGetInfo を呼び出すことによって、データ ソースがサポートする間隔を決定します。
TIMESTAMPDIFF(interval, timestamp_exp1, timestamp_exp2) (ODBC 2.0) timestamp_exp2timestamp_exp1より大きい型の間隔の整数を返します。 interval の有効な値は、次のキーワードです。

SQL_TSI_FRAC_SECOND

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

小数部の秒は、1 秒の 10 億分の 1 で表されます。 たとえば、次の SQL ステートメントは、各従業員の名前と、その従業員が雇用された年数を返します。

SELECT NAME, {fn TIMESTAMPDIFF(SQL_TSI_YEAR, {fn CURDATE()}, HIRE_DATE)} FROM EMPLOYEES

いずれかの timestamp 式が時間値で、 間隔 で日、週、月、四半期、または年が指定されている場合、タイムスタンプの日付部分は、タイムスタンプ間の差を計算する前に現在の日付に設定されます。

いずれかのタイムスタンプ式が日付値で 、間隔 で秒、秒、分、または時間の小数部が指定されている場合、タイムスタンプ間の差を計算する前に、そのタイムスタンプの時間部分は 0 に設定されます。

アプリケーションは、SQL_TIMEDATE_DIFF_INTERVALS オプションを使用して SQLGetInfo を呼び出すことによって、データ ソースがサポートする間隔を決定します。
WEEK(date_exp) (ODBC 1.0) date_expの週フィールドに基づいて、1 から 53 の範囲の整数値として年の週を返します。
YEAR(date_exp) (ODBC 1.0) date_expの year フィールドに基づいて整数値として年を返します。 範囲はデータ ソースに依存します。