共用方式為


時間、日期和間隔函數

下表列出 ODBC 純量函數集中包含的時間和日期函式。 應用程式可以藉由呼叫資訊類型為 SQL_TIMEDATE_FUNCTIONS的 SQLGetInfo,判斷驅動程式支援哪些時間和日期函式。

以timestamp_exp表示的自變數可以是數據行的名稱、另一個純量函式的結果,或是 ODBC-time-escape、ODBC-date-escapeODBC-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。

ODBC 3.0 中已新增CURRENT_DATE、CURRENT_TIME和CURRENT_TIMESTAMP timedate 純量函式,以配合 SQL-92。

函式 描述
CURRENT_DATE() (ODBC 3.0) 傳回目前日期。
CURRENT_TIME[(時間精確度)] (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) 傳回字元字串,其中包含當天的數據源特定名稱(例如,星期日到星期六或 Sun。透過 Sat。針對使用英文的數據源,或針對使用德文的數據源使用 Samstag 的數據源,針對date_exp日期部分傳回 Sonntag。
DAYOFMONTH(date_exp (ODBC 1.0) 以 1-31 範圍內的整數值,根據 date_exp 中的月份字段,傳回月份的日期。
DAYOFWEEK(date_exp (ODBC 1.0) 根據 date_exp 中的星期字段傳回一周中的日期,以 1-7 範圍中的整數值,其中 1 代表星期日。
DAYOFYEAR(date_exp (ODBC 1.0) 根據 date_exp 中的年份字段,傳回年份的日期,以 1-366 範圍內的整數值表示。
EXTRACT(extract-field FROM extract-source (ODBC 3.0) 回擷取來源擷取字段部分。 擷取來源自變數是 datetime 或 interval 表達式。 extract-field 自變數可以是下列其中一個關鍵詞:

年月日小時分鐘秒

傳回值的有效位數是實作定義的。 尺規為 0,除非指定 SECOND,在此情況下,小數位數不小於擷取來源字段的小數秒精確度。
小時(time_exp (ODBC 1.0) 以 0-23 範圍內的整數值,根據 time_exp 中的小時字段傳回小時。
分鐘(time_exp (ODBC 1.0) 根據 time_exp 中的分鐘字段傳回分鐘,做為0-59範圍內的整數值。
月(date_exp (ODBC 1.0) 根據 date_exp 中的月份字段傳回月份,以 1-12 範圍內的整數值作為整數值。
MONTHNAME(date_exp (ODBC 2.0) 傳回字元字串,其中包含月份的數據源特定名稱(例如,1 月到 12 月或 12 月或 12 月。針對使用英文的數據源,或針對使用德文的數據源,傳回 Januar 到 Dezember),以取得date_exp月份部分的數據源。
NOW( ) (ODBC 1.0) 以時間戳值傳回目前的日期和時間。
季(date_exp (ODBC 1.0) 以 1-4 範圍內的整數值傳回date_exp,其中 1 代表 1 月 1 日至 3 月 31 日。
第二(time_exp (ODBC 1.0) 根據time_exp中的第二個字段傳回第二個字段,做為介於 0-59 範圍內的整數值。
TIMESTAMPADD(intervalinteger_exptimestamp_exp ) (ODBC 2.0) 傳回將類型間隔的integer_exp間隔新增timestamp_exp所計算的時間戳。 間隔的有效值為下列關鍵詞:

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

其中小數秒以秒數十億為單位表示。 例如,下列 SQL 語句會傳回每位員工及其一年周年日期的名稱:

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(intervaltimestamp_exp1timestamp_exp2 ) (ODBC 2.0) 傳回類型間隔的整數數目,timestamp_exp2大於timestamp_exp1。 間隔的有效值為下列關鍵詞:

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

其中小數秒以秒數十億為單位表示。 例如,下列 SQL 語句會傳回每位員工的名稱,以及雇用的年數:

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

如果時間戳表達式是時間值,而 間隔 指定天、周、月、季或年,該時間戳的日期部分會設定為目前的日期,然後再計算時間戳之間的差異。

如果時間戳表達式是日期值,而 間隔 指定小數秒、秒、分鐘或小時,則時間戳的時間部分會設定為0,再計算時間戳之間的差異。

應用程式會使用 SQL_TIMEDATE_DIFF_INTERVALS 選項呼叫 SQLGetInfo ,判斷數據源支援的間隔。
周(date_exp (ODBC 1.0) 傳回以 1-53 範圍內整數值date_exp中的周字段為基礎的年份周。
年(date_expODBC 1.0) 根據date_exp中的年份字段,傳回年份做為整數值。 此範圍與數據源相依。