時間、日期和間隔函數
下表列出 ODBC 純量函數集中包含的時間和日期函式。 應用程式可以藉由呼叫資訊類型為 SQL_TIMEDATE_FUNCTIONS的 SQLGetInfo,判斷驅動程式支援哪些時間和日期函式。
以timestamp_exp表示的自變數可以是數據行的名稱、另一個純量函式的結果,或是 ODBC-time-escape、ODBC-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。
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 FROMextract-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(interval, integer_exp, timestamp_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(interval, timestamp_exp1, timestamp_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_exp) (ODBC 1.0) | 根據date_exp中的年份字段,傳回年份做為整數值。 此範圍與數據源相依。 |