ODBC 純量函數 (Transact-SQL)
您可以在 Transact-SQL 陳述式中使用 ODBC 純量函數。 這些陳述式會由 SQL Server 進行解譯。 它們可用於預存程序和使用者自訂函數中。這些項目包括字串、數值、時間、日期、間隔和系統函數。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。 |
使用方式
SELECT {fn <function_name> [ (<argument>,.... n) ] }
函數
下表將列出不會在 Transact-SQL 中重複的 ODBC 純量函數。
字串函數
函數 |
說明 |
---|---|
BIT_LENGTH( string_exp ) (ODBC 3.0) |
傳回字串運算式的長度 (以位元為單位)。 無法只針對字串資料類型運作。 因此,無法將 string_exp 隱含轉換成字串,但是將傳回指定之任何資料類型的 (內部) 大小。 |
CONCAT( string_exp1,string_exp2) (ODBC 1.0) |
傳回字元字串,表示將 string_exp2 串連至 string_exp1 的結果。 產生的字串為 DBMS 相依。 例如,如果由 string_exp1 所代表的資料行包含 NULL 值,DB2 就會傳回 NULL,但是 SQL Server 會傳回非 NULL 字串。 |
OCTET_LENGTH( string_exp ) (ODBC 3.0) |
傳回字串運算式的長度 (以位元組為單位)。 結果就是不小於位元數的最小整數除以 8。 無法只針對字串資料類型運作。 因此,無法將 string_exp 隱含轉換成字串,但是將傳回指定之任何資料類型的 (內部) 大小。 |
數值函數
函數 |
說明 |
---|---|
TRUNCATE( numeric_exp, integer_exp) (ODBC 2.0) |
傳回 numeric_exp (截斷至小數點右邊的 integer_exp 個位置)。 如果 integer_exp 為負數,則 numeric_exp 就會截斷至小數點左邊的 |integer_exp| 個位置。 |
時間、日期和間隔函數
函數 |
說明 |
---|---|
CURRENT_DATE( ) (ODBC 3.0) |
傳回目前的日期。 |
CURRENT_TIME[( time-precision )] (ODBC 3.0) |
傳回目前的當地時間。 其中 time-precision 引數會決定傳回值的秒數有效位數。 |
DAYNAME( date_exp ) (ODBC 2.0) |
傳回字元字串,其中針對 date_exp 的日期部分包含資料來源專用的日期名稱 (例如,若為使用英文的資料來源,則為 Sunday 到 Saturday 或 Sun. 到 Sat.; 若為使用德文的資料來源,則為 Sonntag 到 Samstag)。 |
DAYOFMONTH( date_exp ) (ODBC 1.0) |
根據 date_exp 中的月份欄位,傳回月份的日期成為整數值 (範圍介於 1–31 之間)。 |
DAYOFWEEK( date_exp ) (ODBC 1.0) |
根據 date_exp 中的週欄位,傳回當週的日期成為整數值 (範圍介於 1–7 之間,其中 1 代表星期日)。 |
HOUR( time_exp ) (ODBC 1.0) |
根據 time_exp 中的小時欄位,傳回小時成為整數值 (範圍介於 0–23 之間)。 |
MINUTE( time_exp ) (ODBC 1.0) |
根據 time_exp 中的分鐘欄位,傳回分鐘成為整數值 (範圍介於 0–59 之間)。 |
MONTHNAME( date_exp ) (ODBC 2.0) |
傳回字元字串,其中針對 date_exp 的月份部分包含資料來源專用的月份名稱 (例如,若為使用英文的資料來源,則為 January 到 December 或 Jan. 到 Dec.; 若為使用德文的資料來源,則為 Januar 到 Dezember)。 |
QUARTER( date_exp ) (ODBC 1.0) |
傳回 date_exp 中的季度成為整數值 (範圍介於 1–4 之間,其中 1 代表 1 月 1 日到 3 月 31 日)。 |
WEEK( date_exp ) (ODBC 1.0) |
根據 date_exp 中的週欄位,傳回該年的週數成為整數值 (範圍介於 1–53 之間)。 |
範例
A.在預存程序中使用 ODBC 函數
下列範例會在預存程序中使用 ODBC 函數:
CREATE PROCEDURE dbo.ODBCprocedure
(
@string_exp nvarchar(4000)
)
AS
SELECT {fn OCTET_LENGTH( @string_exp )};
B.在使用者定義函數中使用 ODBC 函數
下列範例會在使用者自訂函數中使用 ODBC 函數:
CREATE FUNCTION dbo.ODBCudf
(
@string_exp nvarchar(4000)
)
RETURNS int
AS
BEGIN
DECLARE @len int
SET @len = (SELECT {fn OCTET_LENGTH( @string_exp )})
RETURN(@len)
END ;
SELECT dbo.ODBCudf('Returns the length.');
--Returns 38
C.在 SELECT 陳述式中使用 ODBC 函數
下列 SELECT 陳述式會使用 ODBC 函數:
DECLARE @string_exp nvarchar(4000) = 'Returns the length.';
SELECT {fn BIT_LENGTH( @string_exp )};
-- Returns 304
SELECT {fn OCTET_LENGTH( @string_exp )};
-- Returns 38
SELECT {fn CONCAT( 'CONCAT ','returns a character string')};
-- Returns CONCAT returns a character string
SELECT {fn TRUNCATE( 100.123456, 4)};
-- Returns 100.123400
SELECT {fn CURRENT_DATE( )};
-- Returns 2007-04-20
SELECT {fn CURRENT_TIME(6)};
-- Returns 10:27:11.973000
DECLARE @date_exp nvarchar(30) = '2007-04-21 01:01:01.1234567';
SELECT {fn DAYNAME( @date_exp )};
-- Returns Saturday
SELECT {fn DAYOFMONTH( @date_exp )};
-- Returns 21
SELECT {fn DAYOFWEEK( @date_exp )};
-- Returns 7
SELECT {fn HOUR( @date_exp)};
-- Returns 1
SELECT {fn MINUTE( @date_exp )};
-- Returns 1
SELECT {fn MONTHNAME( @date_exp )};
-- Returns April
SELECT {fn QUARTER( @date_exp )};
-- Returns 2
SELECT {fn WEEK( @date_exp )};
-- Returns 16