純量函式呼叫
純量函式會傳回每個資料列的值。 例如,絕對值純量函數會採用數值資料行做為引數,並傳回資料行中每個值的絕對值。 呼叫純量函式的逸出序列為
{fn scalar-function }
其中 scalar-function 是附錄 E:純量函式中列出的其中一個函式。 如需純量函式逸出序列的詳細資訊,請參閱附錄 C:SQL 文法中的純量函式逸出序列。
例如,下列 SQL 陳述式會建立相同的大寫客戶名稱結果集。 第一個陳述式會使用逸出序列語法。 第二個陳述式使用 OS/2 的 Ingres 原生語法,而且無法互通。
SELECT {fn UCASE(Name)} FROM Customers
SELECT uppercase(Name) FROM Customers
應用程式可以混合使用原生語法的純量函式呼叫,以及使用 ODBC 語法的純量函式呼叫。 例如,假設 Employee 資料表中的名稱會儲存為姓氏、逗號和名字。 下列 SQL 陳述式會在 Employee 資料表中建立員工姓氏的結果集。 陳述式會使用 ODBC 純量函式 SUBSTRING 和 SQL Server 純量函式 CHARINDEX,而且只會在 SQL Server 上正確執行。
SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers
為了達到最大互通性,應用程式應該使用 CONVERT 純量函式來確保純量函式的輸出是必要類型。 CONVERT 函式會將資料從一個 SQL 資料類型轉換成指定的 SQL 資料類型。 CONVERT 函式的語法為
CONVERT( value_exp , data_type)
其中 value_exp 是數據行名稱、另一個純量函式的結果或常值,而 data_type 是符合 SQL 數據類型識別碼所使用 #define 名稱的關鍵詞,如附錄 D:數據類型中所定義。 例如,下列 SQL 陳述式會使用 CONVERT 函數來確保 CURDATE 函式的輸出是日期,而不是時間戳記或字元資料:
INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)
VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)
若要判斷資料來源支援哪些純量函式,應用程式會使用 SQL_CONVERT_FUNCTIONS、SQL_NUMERIC_FUNCTIONS、SQL_STRING_FUNCTIONS、SQL_SYSTEM_FUNCTIONS 和 SQL_TIMEDATE_FUNCTIONS 選項呼叫 SQLGetInfo。 若要判斷 CONVERT 函式支援哪些轉換作業,應用程式會使用任何以 SQL_CONVERT 開頭的選項呼叫 SQLGetInfo。