次の方法で共有


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

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

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

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

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

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) 日のデータ ソース固有の名前を含む文字列を返します (たとえば、日曜日から土曜日、日曜日から土日まで)。英語を使用するデータ ソースの場合は Sonntag、ドイツ語を使用するデータ ソースの場合は 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-sourceextract-field の部分を返します。 extract-source 引数は datetime または interval 式です。 引数 extract-field には、次のいずれかのキーワードを指定できます。

年 月 日 時 分 秒

戻り値の有効桁数は実装定義です。 SECOND を指定しない限り、小数点以下桁数は 0 です。その場合、小数点以下桁数は extract-source フィールドの秒の小数部の有効桁数より小数部です。
HOUR(time_exp) (ODBC 1.0) time_expの時間フィールドに基づいて、0 から 23 の範囲の整数値として時間を返します。
MINUTE(time_exp) (ODBC 1.0) time_expの分フィールドに基づいて、0 から 59 の範囲の整数値として分を返します。
MONTH(date_exp) (ODBC 1.0) date_expの月フィールドに基づいて、1 から 12 の範囲の整数値として月を返します。
MONTHNAME(date_exp) (ODBC 2.0) 月のデータ ソース固有の名前を含む文字列を返します (たとえば、1 月から 12 月、1 月から 12 月。英語を使用するデータ ソースの場合は Januar、ドイツ語を使用するデータ ソースの場合は 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) 型の間隔integer_expintervaltimestamp_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

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

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

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

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

アプリケーションは、SQL_TIMEDATE_ADD_INTERVALS オプションを指定して SQLGetInfo を呼び出すことによって、データ ソースがサポートする間隔を決定します。
TIMESTAMPDIFF(interval, timestamp_exp1, timestamp_exp2) (ODBC 2.0) timestamp_exp2timestamp_exp1より大きいinterval 型の間隔の整数を返します。 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

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

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

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

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

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