表達(dá)式是符號與運(yùn)算符的組合,Microsoft® SQL Server™ 對其求值以獲得單個(gè)數(shù)據(jù)值。簡單的表達(dá)式可以是一個(gè)常量、變量、列或標(biāo)量函數(shù)??梢杂眠\(yùn)算符將兩個(gè)或更多的簡單表達(dá)式聯(lián)接起來組成復(fù)雜的表達(dá)式。
{ constant
| scalar_function
| [ alias.] column
| local_variable
| ( expression )
| ( scalar_subquery )
|
{ unary_operator
} expression
| expression { binary_operator
} expression
}
constant
是表示單個(gè)特定數(shù)據(jù)值的符號。constant 是一個(gè)或多個(gè)字母數(shù)字字符(字母 a-z、A-Z 和數(shù)字 0-9)或符號(驚嘆號 (!)、at 符 (@)、數(shù)字符號 (#) 等等)。字符和 datetime 值要用引號括起來,而二進(jìn)制字符串與數(shù)字常量則不必。有關(guān)更多信息,請參見常量。
scalar_function
是 Transact-SQL 語法的一個(gè)單元,用于提供特定的服務(wù)和返回單值。scalar_function 可以是內(nèi)置標(biāo)量函數(shù)(如 SUM、GETDATE 或 CAST 函數(shù)),也可以是用戶定義函數(shù)。
[alias.]
是由 FORM 子句中的 AS 關(guān)鍵字分配給表的別名或者相關(guān)名稱。
column
是一個(gè)列的名稱。在表達(dá)式中只允許有列的名稱;不允許指定 4 個(gè)部分的名稱。
local_variable
是用戶定義變量的名稱。有關(guān)更多信息,請參見 DECLARE @local_variable。
(expression)
是本主題中定義的任意有效的 SQL Server 表達(dá)式。括號是分組運(yùn)算符,確保括號內(nèi)表達(dá)式中的運(yùn)算符先運(yùn)算,然后其結(jié)果再與別的表達(dá)式組合。
(scalar_subquery)
是返回一個(gè)值的子查詢。例如:
SELECT MAX(UnitPrice)
FROM Products
{unary_operator}
是只有一個(gè)數(shù)字操作數(shù)的運(yùn)算符:
一元運(yùn)算符只能用于取值為數(shù)據(jù)類型的表達(dá)式中,此數(shù)據(jù)類型可以是數(shù)字?jǐn)?shù)據(jù)類型中的任一種。
{binary_operator}
是用于組合兩個(gè)表達(dá)式得出一個(gè)結(jié)果的運(yùn)算符,binary _operator 可以是算術(shù)運(yùn)算符、賦值運(yùn)算符 (=)、位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串連接運(yùn)算符 (+) 或一元運(yùn)算符。有關(guān)運(yùn)算符的更多信息,請參見運(yùn)算符。
對于由單個(gè)常量、變量、標(biāo)量函數(shù)或列名組成的簡單表達(dá)式,該表達(dá)式的數(shù)據(jù)類型、排序規(guī)則、精度、小數(shù)位數(shù)和值就是它所引用的元素的數(shù)據(jù)類型、排序規(guī)則、精度、小數(shù)位數(shù)和值。
如果兩個(gè)表達(dá)式是用比較或者邏輯運(yùn)算符組合的,則結(jié)果的數(shù)據(jù)類型是布爾型,值有三種:TRUE FALSE 或 UNKNOWN。有關(guān)布爾數(shù)據(jù)類型的更多信息,請參見運(yùn)算符。
如果兩個(gè)表達(dá)式是用算術(shù)運(yùn)算符、位運(yùn)算符或字符串運(yùn)算符組合的,則結(jié)果的數(shù)據(jù)類型由運(yùn)算符確定。
復(fù)雜的表達(dá)式由很多符號與運(yùn)算符構(gòu)成,得出一個(gè)單值結(jié)果。通過對組件表達(dá)式進(jìn)行組合來確定結(jié)果表達(dá)式的數(shù)據(jù)類型、排序規(guī)則、精度和值,每次組合兩個(gè)表達(dá)式,直到得到最后結(jié)果。表達(dá)式中元素組合的順序由表達(dá)式中運(yùn)算符的優(yōu)先級決定。
兩個(gè)表達(dá)式可以由一個(gè)運(yùn)算符組合起來,只要它們具有該運(yùn)算符支持的數(shù)據(jù)類型,并且滿足至少下列一個(gè)條件:
如果沒有支持的隱式或顯式轉(zhuǎn)換,兩個(gè)表達(dá)式不能組合。
任何取值為字符串的表達(dá)式的排序規(guī)則都應(yīng)遵循排序規(guī)則優(yōu)先順序規(guī)則。有關(guān)更多信息,請參見排序規(guī)則的優(yōu)先順序。
在 C 或 Microsoft Visual Basic® 這類編程語言中,表達(dá)式始終求得單值結(jié)果。Transact-SQL 選擇列表中的表達(dá)式在該規(guī)則上有所不同:其表達(dá)式在結(jié)果集內(nèi)按行單獨(dú)計(jì)算。同一個(gè)表達(dá)式對結(jié)果集內(nèi)的每一行可能會有不同的值,但該表達(dá)式在每一行的值是唯一的。例如,在這個(gè) SELECT 語句中,選擇列表中的引用 ProductID 和 1+2 都是表達(dá)式:
SELECT ProductID, 1+2
FROM Northwind.dbo.Products
表達(dá)式 1+2 在結(jié)果集的每一行都等于3。盡管表達(dá)式 ProductID 在結(jié)果集的每一行中產(chǎn)生一個(gè)唯一值,每一行的 ProductID 值也僅有一個(gè)。
相關(guān)文章