運(yùn)算符是一種符號(hào),用來(lái)指定要在一個(gè)或多個(gè)表達(dá)式中執(zhí)行的操作。Microsoft® SQL Server™ 2000 使用下列幾類運(yùn)算符:
算術(shù)運(yùn)算符在兩個(gè)表達(dá)式上執(zhí)行數(shù)學(xué)運(yùn)算,這兩個(gè)表達(dá)式可以是數(shù)字?jǐn)?shù)據(jù)類型分類的任何數(shù)據(jù)類型。有關(guān)數(shù)據(jù)類型分類的更多信息,請(qǐng)參見(jiàn) Transact-SQL 語(yǔ)法規(guī)則。
運(yùn)算符 | 含義 |
---|---|
+(加) | 加法。 |
-(減) | 減法。 |
*(乘) | 乘法。 |
/(除) | 除法。 |
%(模) | 返回一個(gè)除法的整數(shù)余數(shù)。例如,12 % 5 = 2,這是因?yàn)?12 除以 5,余數(shù)為 2。 |
加 (+) 和減 () 運(yùn)算符也可用于對(duì) datetime 及 smalldatetime 值執(zhí)行算術(shù)運(yùn)算。
有關(guān)算術(shù)運(yùn)算結(jié)果的精度和小數(shù)位數(shù)的更多信息,請(qǐng)參見(jiàn)精度、小數(shù)位數(shù)及長(zhǎng)度。
Transact-SQL 有一個(gè)賦值運(yùn)算符,即等號(hào) (=)。在下面的示例中,創(chuàng)建了 @MyCounter 變量。然后,賦值運(yùn)算符將 @MyCounter 設(shè)置成一個(gè)由表達(dá)式返回的值。
DECLARE @MyCounter INT
SET @MyCounter = 1
也可以使用賦值運(yùn)算符在列標(biāo)題和為列定義值的表達(dá)式之間建立關(guān)系。下面的示例顯示名為 FirstColumnHeading 和 SecondColumnHeading 的兩個(gè)列標(biāo)題。在 FirstColumnHeading 列標(biāo)題中為所有的行都顯示字符串 xyz。然后,在 SecondColumnHeading 列標(biāo)題中列出來(lái)自 Products 表的每個(gè)產(chǎn)品 ID。
USE Northwind
GO
SELECT FirstColumnHeading = 'xyz',
SecondColumnHeading = ProductID
FROM Products
GO
位運(yùn)算符在兩個(gè)表達(dá)式之間執(zhí)行位操作,這兩個(gè)表達(dá)式可以為整型數(shù)據(jù)類型分類中的任何數(shù)據(jù)類型。
運(yùn)算符 | 含義 |
---|---|
&(按位 AND) | 按位 AND(兩個(gè)操作數(shù))。 |
|(按位 OR) | 按位 OR(兩個(gè)操作數(shù))。 |
^(按位互斥 OR) | 按位互斥 OR(兩個(gè)操作數(shù))。 |
位運(yùn)算符的操作數(shù)可以是整型或二進(jìn)制字符串?dāng)?shù)據(jù)類型分類中的任何數(shù)據(jù)類型(但 image 數(shù)據(jù)類型除外),此外,兩個(gè)操作數(shù)不能同時(shí)是二進(jìn)制字符串?dāng)?shù)據(jù)類型分類中的某種數(shù)據(jù)類型。下表顯示所支持的操作數(shù)數(shù)據(jù)類型。
左邊操作數(shù) | 右邊操作數(shù) |
---|---|
binary | int、smallint 或 tinyint |
bit | int、smallint、tinyint 或 bit |
int | int、smallint、tinyint、binary 或 varbinary |
smallint | int、smallint、tinyint、binary 或 varbinary |
tinyint | int、smallint、tinyint、binary 或 varbinary |
varbinary | int、smallint 或 tinyint |
比較運(yùn)算符測(cè)試兩個(gè)表達(dá)式是否相同。除了 text、ntext 或 image 數(shù)據(jù)類型的表達(dá)式外,比較運(yùn)算符可以用于所有的表達(dá)式。
運(yùn)算符 | 含義 |
---|---|
=(等于) | 等于 |
>(大于) | 大于 |
<(小于) | 小于 |
>=(大于或等于) | 大于等于 |
<=(小于或等于) | 小于等于 |
<>(不等于) | 不等于 |
!=(不等于) | 不等于(非 SQL-92 標(biāo)準(zhǔn)) |
!< (不小于) | 不小于(非 SQL-92 標(biāo)準(zhǔn)) |
!> (不大于) | 不大于(非 SQL-92 標(biāo)準(zhǔn)) |
比較運(yùn)算符的結(jié)果有布爾數(shù)據(jù)類型,它有三種值:TRUE、FALSE 及 UNKNOWN。那些返回布爾數(shù)據(jù)類型的表達(dá)式被稱為布爾表達(dá)式。
和其它 SQL Server 數(shù)據(jù)類型不同,不能將布爾數(shù)據(jù)類型指定為表列或變量的數(shù)據(jù)類型,也不能在結(jié)果集中返回布爾數(shù)據(jù)類型。
當(dāng) SET ANSI_NULLS 為 ON 時(shí),帶有一個(gè)或兩個(gè) NULL 表達(dá)式的運(yùn)算符返回 UNKNOWN。當(dāng) SET ANSI_NULLS 為 OFF 時(shí),上述規(guī)則同樣適用,只不過(guò)如果兩個(gè)表達(dá)式都為 NULL,那么等號(hào)運(yùn)算符返回 TRUE。例如,如果 SET ANSI_NULLS 是 OFF,那么 NULL = NULL 就返回 TRUE。
在 WHERE 子句中使用帶有布爾數(shù)據(jù)類型的表達(dá)式,可以篩選出符合搜索條件的行,也可以在流控制語(yǔ)言語(yǔ)句(例如 IF 和 WHILE)中使用這種表達(dá)式。例如:
USE Northwind
GO
DECLARE @MyProduct int
SET @MyProduct = 10
IF (@MyProduct <> 0)
SELECT *
FROM Products
WHERE ProductID = @MyProduct
GO
邏輯運(yùn)算符對(duì)某個(gè)條件進(jìn)行測(cè)試,以獲得其真實(shí)情況。邏輯運(yùn)算符和比較運(yùn)算符一樣,返回帶有 TRUE 或 FALSE 值的布爾數(shù)據(jù)類型。
運(yùn)算符 | 含義 |
---|---|
ALL | 如果一系列的比較都為 TRUE,那么就為 TRUE。 |
AND | 如果兩個(gè)布爾表達(dá)式都為 TRUE,那么就為 TRUE。 |
ANY | 如果一系列的比較中任何一個(gè)為 TRUE,那么就為 TRUE。 |
BETWEEN | 如果操作數(shù)在某個(gè)范圍之內(nèi),那么就為 TRUE。 |
EXISTS | 如果子查詢包含一些行,那么就為 TRUE。 |
IN | 如果操作數(shù)等于表達(dá)式列表中的一個(gè),那么就為 TRUE。 |
LIKE | 如果操作數(shù)與一種模式相匹配,那么就為 TRUE。 |
NOT | 對(duì)任何其它布爾運(yùn)算符的值取反。 |
OR | 如果兩個(gè)布爾表達(dá)式中的一個(gè)為 TRUE,那么就為 TRUE。 |
SOME | 如果在一系列比較中,有些為 TRUE,那么就為 TRUE。 |
有關(guān)邏輯運(yùn)算符的更多信息,請(qǐng)參見(jiàn)專門(mén)的邏輯運(yùn)算符主題。
字符串串聯(lián)運(yùn)算符允許通過(guò)加號(hào) (+) 進(jìn)行字符串串聯(lián),這個(gè)加號(hào)也被稱為字符串串聯(lián)運(yùn)算符。其它所有的字符串操作都可以通過(guò)字符串函數(shù)(例如 SUBSTRING)進(jìn)行處理。
默認(rèn)情況下,對(duì)于 varchar 數(shù)據(jù)類型的數(shù)據(jù),在 INSERT 或賦值語(yǔ)句中,將空的字符串解釋為空字符串。在串聯(lián) varchar、char 或 text 數(shù)據(jù)類型的數(shù)據(jù)時(shí),空的字符串被解釋為空字符串。例如,將 'abc' + '' + 'def' 存儲(chǔ)為 'abcdef'。但是,如果 sp_dbcmptlevel 兼容性級(jí)別設(shè)置為 65,那么將空的常量當(dāng)作一個(gè)空格字符,這樣就將 'abc' + '' + 'def' 存儲(chǔ)為 'abc def'。有關(guān)空字符串的解釋的更多信息,請(qǐng)參見(jiàn) sp_dbcmptlevel。
當(dāng)兩字符串串聯(lián)時(shí),根據(jù)排序規(guī)則的優(yōu)先規(guī)則設(shè)置結(jié)果表達(dá)式的排序規(guī)則。有關(guān)更多信息,請(qǐng)參見(jiàn)排序規(guī)則的優(yōu)先順序。
一元運(yùn)算符只對(duì)一個(gè)表達(dá)式執(zhí)行操作,這個(gè)表達(dá)式可以是數(shù)字?jǐn)?shù)據(jù)類型分類中的任何一種數(shù)據(jù)類型。
運(yùn)算符 | 含義 |
---|---|
+ (正) | 數(shù)值為正。 |
- (負(fù)) | 數(shù)值為負(fù)。 |
~(按位 NOT) | 返回?cái)?shù)字的補(bǔ)數(shù)。 |
+ (正)和 - (負(fù))運(yùn)算符可以用于數(shù)字?jǐn)?shù)據(jù)類型分類的任何數(shù)據(jù)類型的表達(dá)式。~ (按位 NOT)運(yùn)算符只可以用于整型數(shù)據(jù)類型分類的任何數(shù)據(jù)類型的表達(dá)式。
當(dāng)一個(gè)復(fù)雜的表達(dá)式有多個(gè)運(yùn)算符時(shí),運(yùn)算符優(yōu)先性決定執(zhí)行運(yùn)算的先后次序。執(zhí)行的順序可能?chē)?yán)重地影響所得到的值。
運(yùn)算符有下面這些優(yōu)先等級(jí)。在較低等級(jí)的運(yùn)算符之前先對(duì)較高等級(jí)的運(yùn)算符進(jìn)行求值。
當(dāng)一個(gè)表達(dá)式中的兩個(gè)運(yùn)算符有相同的運(yùn)算符優(yōu)先等級(jí)時(shí),基于它們?cè)诒磉_(dá)式中的位置來(lái)對(duì)其從左到右進(jìn)行求值。例如,在下面的示例中,在 SET 語(yǔ)句中使用的表達(dá)式中,在加號(hào)運(yùn)算符之前先對(duì)減號(hào)運(yùn)算符進(jìn)行求值。
DECLARE @MyNumber int
SET @MyNumber = 4 - 2 + 27
-- Evaluates to 2 + 27 which yields an expression result of 29.
SELECT @MyNumber
在表達(dá)式中可以使用括號(hào)替代所定義的運(yùn)算符的優(yōu)先性。首先對(duì)括號(hào)中的內(nèi)容進(jìn)行求值,從而產(chǎn)生一個(gè)值,然后括號(hào)外的運(yùn)算符才可以使用這個(gè)值。
例如在下面的示例中,在 SET 語(yǔ)句所使用的表達(dá)式中,乘運(yùn)算符比加運(yùn)算符有更高的優(yōu)先權(quán),所以先對(duì)乘運(yùn)算符進(jìn)行求值;表達(dá)式的結(jié)果是 13。
DECLARE @MyNumber int
SET @MyNumber = 2 * 4 + 5
-- Evaluates to 8 + 5 which yields an expression result of 13.
SELECT @MyNumber
在下面的示例中,在 SET 語(yǔ)句使用的表達(dá)式中,括號(hào)使得首先執(zhí)行加法;表達(dá)式結(jié)果是 18。
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + 5)
-- Evaluates to 2 * 9 which yields an expression result of 18.
SELECT @MyNumber
如果表達(dá)式有嵌套的括號(hào),那么首先對(duì)嵌套最深的表達(dá)式求值。下面的示例中包含嵌套的括號(hào),其中表達(dá)式 5 - 3 在嵌套最深的那對(duì)括號(hào)中。該表達(dá)式產(chǎn)生一個(gè)值 2。然后加運(yùn)算符將這個(gè)結(jié)果與 4 相加,這樣就得出一個(gè)為 6 的值。最后將 6 與 2 相乘,產(chǎn)生一個(gè)表達(dá)式結(jié)果 12。
DECLARE @MyNumber int相關(guān)文章
SET @MyNumber = 2 * (4 + (5 - 3) )
-- Evaluates to 2 * (4 + 2) which further evaluates to 2 * 6, and
-- yields an expression result of 12.
SELECT @MyNumber